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
}
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
}
如果覆盖测试进行的不够好的话,使用这种特性创建的属性很容易犯一个经典错误“未将对象引用为对象的实例”。虽然现在C#3.0还没有正式Release,但是我仍然期待着能够将这个特性更加完善,至少在编译的时候给出警告。



浙公网安备 33010602011771号