C#3.0 自动属性——只能在简单属性上偷懒
C# 3.0 为了提高开发效率和改善编程体验,提供了自动属性的功能,具体的代码则由编译器完成。这样一来声明类中的属性和在接口中声明属性简直就无法区分出来。
但是,在体验中发现我们只能对string, int这样的简单属性(值类型)充分使用这个新特性,而对于复杂属性(引用类型)则没有那么智能,编译程序的时候是不会有任何警告的。例如下面的代码:
但是,在体验中发现我们只能对string, int这样的简单属性(值类型)充分使用这个新特性,而对于复杂属性(引用类型)则没有那么智能,编译程序的时候是不会有任何警告的。例如下面的代码:
1 class Program {
2 static void Main(string[] args) {
3 OrderSheet order = new OrderSheet();
4 order.Name= "skfjskfjskfj";
5
6 GlobalOrder go = new GlobalOrder();
7 string s = go.Doc.BaseURI;
8 go.Orders.Add(new OrderSheet());
9
10 }
11
12 class GlobalOrder {
13 //集合属性不能进行隐示声明,必须在适当的地方进行初始化
14 public OrderCollection Orders { get; set; }
15
16 //引用类型需要进行初始化,而不能仅仅依赖于编译器
17 public XmlDocument Doc { get; set; }
18 }
19
20 class OrderSheet {
21 public string Name { get; set; }
22 }
23
24 class OrderCollection:Collection<OrderSheet> {
25
26 }
27
28 }
2 static void Main(string[] args) {
3 OrderSheet order = new OrderSheet();
4 order.Name= "skfjskfjskfj";
5
6 GlobalOrder go = new GlobalOrder();
7 string s = go.Doc.BaseURI;
8 go.Orders.Add(new OrderSheet());
9
10 }
11
12 class GlobalOrder {
13 //集合属性不能进行隐示声明,必须在适当的地方进行初始化
14 public OrderCollection Orders { get; set; }
15
16 //引用类型需要进行初始化,而不能仅仅依赖于编译器
17 public XmlDocument Doc { get; set; }
18 }
19
20 class OrderSheet {
21 public string Name { get; set; }
22 }
23
24 class OrderCollection:Collection<OrderSheet> {
25
26 }
27
28 }
如果覆盖测试进行的不够好的话,使用这种特性创建的属性很容易犯一个经典错误“未将对象引用为对象的实例”。虽然现在C#3.0还没有正式Release,但是我仍然期待着能够将这个特性更加完善,至少在编译的时候给出警告。