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

 C# 3.0 为了提高开发效率和改善编程体验,提供了自动属性的功能,具体的代码则由编译器完成。这样一来声明类中的属性和在接口中声明属性简直就无法区分出来。
 但是,在体验中发现我们只能对string, int这样的简单属性(值类型)充分使用这个新特性,而对于复杂属性(引用类型)则没有那么智能,编译程序的时候是不会有任何警告的。例如下面的代码:
 1 ExpandedBlockStart.gif ContractedBlock.gif   class  Program  dot.gif {
 2ExpandedSubBlockStart.gifContractedSubBlock.gif        static void Main(string[] args) dot.gif{
 3InBlock.gif            OrderSheet order = new OrderSheet();
 4InBlock.gif            order.Name= "skfjskfjskfj";
 5InBlock.gif
 6InBlock.gif            GlobalOrder go = new GlobalOrder();
 7InBlock.gif            string  s = go.Doc.BaseURI;
 8InBlock.gif            go.Orders.Add(new OrderSheet());
 9InBlock.gif            
10ExpandedSubBlockEnd.gif        }

11InBlock.gif
12ExpandedSubBlockStart.gifContractedSubBlock.gif        class GlobalOrder dot.gif{
13InBlock.gif            //集合属性不能进行隐示声明,必须在适当的地方进行初始化
14ExpandedSubBlockStart.gifContractedSubBlock.gif            public OrderCollection Orders dot.gifgetset; }
15InBlock.gif
16InBlock.gif            //引用类型需要进行初始化,而不能仅仅依赖于编译器
17ExpandedSubBlockStart.gifContractedSubBlock.gif            public XmlDocument Doc dot.gifgetset; }
18ExpandedSubBlockEnd.gif        }

19InBlock.gif
20ExpandedSubBlockStart.gifContractedSubBlock.gif        class OrderSheet dot.gif{
21ExpandedSubBlockStart.gifContractedSubBlock.gif           public string Name dot.gifgetset; }
22ExpandedSubBlockEnd.gif        }

23InBlock.gif
24ExpandedSubBlockStart.gifContractedSubBlock.gif        class OrderCollection:Collection<OrderSheet> dot.gif{
25InBlock.gif            
26ExpandedSubBlockEnd.gif        }

27InBlock.gif
28ExpandedBlockEnd.gif    }


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

 

转载于:https://www.cnblogs.com/DreamWinter/archive/2007/05/31/766770.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值