C#3.0 自动属性——只能在简单属性上偷懒

 C# 3.0 为了提高开发效率和改善编程体验,提供了自动属性的功能,具体的代码则由编译器完成。这样一来声明类中的属性和在接口中声明属性简直就无法区分出来。
 但是,在体验中发现我们只能对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 getset; }
15
16            //引用类型需要进行初始化,而不能仅仅依赖于编译器
17            public XmlDocument Doc getset; }
18        }

19
20        class OrderSheet {
21           public string Name getset; }
22        }

23
24        class OrderCollection:Collection<OrderSheet> {
25            
26        }

27
28    }


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

 

posted @ 2007-05-31 18:27  大约在冬季  阅读(350)  评论(2编辑  收藏  举报