关于属性

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 之类

其实语法糖的东西。 在不清楚编译器做了什么之前,最好不要用, 天知道他干什么了。。

posted @ 2011-08-20 23:42  CallMeTommy  阅读(121)  评论(0)    收藏  举报