打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[.net学习笔记]C#新特性

对象与集合初始化器:

1.先介绍一下自动属性:

public Class Customer{        private string m_ID;        //ID属性定义,这种写法大家都很熟悉        public string ID        {                get{ return m_ID; }                set{ m_ID = value;}        }}//C#3.0中大大简化这种属性的写法(确实节省了不少代码量,赞!)public Class Customer{        public string ID{get; set;}}

C# 3.0的自动属性就不需要创建私有变量,而把这个工作交给编译器代劳!当然,如果需要在获取访问器get或设置访问器set里头添加一些逻辑,扩展也很方便。

2.对象初始化器

//我们还是以以前习惯的写法举例public Class Customer{      public Customer()      {      }      public Customer(string pID)      {         ID = pID;      }      public Customer(string pID,string pName,string pAge)      {         ID = pID;         Name = pName;         Age = pAge;      }      public string ID{ get; set;}      public string Name{get;set;}              public string age{get;set;}}        //Customer对象初始化        Customer customer = new Customer();        customer.ID = "001";        customer.Name = "Test001";        customer.Age = "28";        //或者使用构造函数        Customer customer = new Customer("001","test001","28");

上面这种写法在我们以前的代码里随处可见,而有了对象初始化器之后这种写发会被更简洁的代码所替代,不需要写这么多条的赋值语句,不需要定义这么多的构造函数来初始化;

//对象初始化器public Class Customer{      public Customer()      {      }      public string ID{ get; set;}      public string Name{get;set;}              public string age{get;set;}}        //Customer对象初始化(想要初始化几个属性都可以)        Customer customer = new Customer{ ID="001",Name="test001",age="28"};

当然从本质上讲,只是简化了代码编写工作,后台编译器自动完成转换。对象初始化器实际上利用了编译器对对象中对外可见的字段和属性进行按序赋值,在编译时还是隐式调用了构造函数,对字段或属性的进行逐一赋值。

除了在初始化类时设置简单的属性值外,对象初始化器特性也允许我们设置更复杂的嵌套(nested)属性类型

//Customer对象初始化(想要初始化几个属性都可以)Customer customer = new Customer{ ID="001",Name="test001",age="28",        Detail=new CustomerDetail{Address="sh",DeliAddress="fj"}};

3.集合初始化器

集合初始化器会对初始化器中的元素进行按序调用ICollection<T>.Add(T) 。应用集合初始化器的对象的类型必须实现了System.Collections.Generic.ICollections<T>接口并指定了确定的T。

例如:List<int> num= new List<int> { 0, 1, 2, 6, 7, 8, 9 };List<Customer> customers = new List<Customer>{         new Customer{ID="001",Name="test001",age="28"},        new Customer{ID="002",Name="test002",age="29"},        new Customer{ID="003",Name="test003",age="30"} };

这和以前调用List.Add没有本质的区别,编译器自动的调用了List的无参构造方法,然后实例化一个个的Customer,再一个个的Add进去,和我们原来的做法没有什么不同,但是,这是编译器在后台自动处理,简省了我们很多的编码工作。

小结:从这些新特性可以看出微软在底层编译器中集成越来越多的工作,使得开发人员宝贵的时间尽可能的节省,代码的编写更符合人的思维模式;工具的强大使得开发人员工作精力更集中在业务实现这块,而无需关注更多的底层细节;确实语言平台都是工具,开发出合格的产品才是我们更应该关注的!

网友博客中拷贝的一段话:(原文http://www.cnblogs.com/yuyijq/archive/2008/07/17/1244433.html

附加:
刚开始想想这对象集合初始化器也许就一鸡肋,没啥用,不就减少一点点代码么,像这种简单的初始化工作,大部分代码生成器都可以来干。后来在研究匿名类型的时候突然发现,如果没有这个对象初始化器,匿名类型是不是要复杂一些?或者就是难以实现?
var test = new{Key="test",Value="test"};如果没有对象初始化器,匿名类型该怎么办?

匿名类型还没正式研究,但是我觉的任何一个改变都不会是孤立存在,C#3.0的许多新特性也是互相关联,而且可以肯定很多新特性是为了Linq这个做准备的!(随着研究深入会不断补充新体会)

转自:http://blog.csdn.net/maotin/article/details/2977138

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
java提高篇(十二)-----代码块
JPA映射单向多对一的关联关系
Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级)
在C#中使用属性控件添加属性窗口
条款10:理解GetHashCode()方法的缺陷
高级框架-springDate-JPA 第二天【悟空教程】
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服