关于属性
public class a
{
public int age;
}
var a = new a();
age = 5;
你就直接赋值了,当然作者十分反对这样做, 她违反了OO思想的一个原则就是 数据封装
比如一个不熟悉代码的程序员.. age = 2000;
这个时候属性就出场了。 各种限制.
class aaa
{
private int _a = 5;
public int a { get { return a; } } //丫只读
private int _b;
public int b { set { _b = value; } } //这里就可以对value 做判断 throw一些错误
}
换句话说 属性能让类在你的控制之中..
关于性能。 这是一个坑。。
关于属性的一些说明
1 他丫永远是最新的值
比如 public string t { get { return DateTime.Now.ToString(); } }
而不会像字段一样。 赋值一次就ok了不管什么时候调用都是最初的值
2 不能out ref. 当然.. 你直接对原始字段out ref 不就完了。。 当然我指的是内部。
属性应该是没有性能损失了。 他编译时会替换代码。。
关于初始化
var o = new aaa { a = { "a", "b" } };
class aaa
{
public List<string> a = new List<string>();
}
这种初始化方式不错,可读性不错,也比较简便。
var o = new { name="aaa" }; //匿名实例化
当然她还是语法糖,编译器做了很多事儿罢了..
当然可不可不用。。
索引器
class aaa
{
public string this[string a]
{
get { return a; }
}
}
var o = new aaa();
o["aaa"];
其实就是一个简化的方法
class aaa
{
public string aaaaa(string a) { return a; }
}
当然不用取名字也是好事儿一件。。
Set同理就不赘述了。
= = ~ 还是语法糖.
会生成方法 set 多一个value的参数罢了
1。只能用于实例
2. 可以重载
3. 可以修改生成的名字。 不过你改他干什么呢
4.在你同时拥有 get set 的时候可以对他设置可访问性,private 之类
其实语法糖的东西。 在不清楚编译器做了什么之前,最好不要用, 天知道他干什么了。。