`
k_lb
  • 浏览: 798050 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

C#3.0新体验(三) 对象与集合初始化器

 
阅读更多
前言:

每天起得很早,花将近1.5个小时的路程来到公司,晚上下班到家基本上19:30以后;每天除了睡觉的7个多小时,有将近1/5时间在路上,呵呵,不知道有多少人和我一样,我想所谓大城市的快节奏是不是因为住得离公司太远,每天为了不迟到赶到公司,下班为了赶紧回家和家人一起吃饭而催生出来的;在这种环境生活不容易啊,每天地铁、公交的拥挤能把一天的好心情都挤没了,到了公司除了一身汗臭还有就是满肚的报怨(前天被个中年阿姨抢了位置,NND昨天又被高跟鞋踩了一脚);于是天天看着公交车外开过的一辆辆的小车那是相当羡慕啊,看着里面的帅哥美女,人家这日子过得多滋润;为了早日能有一部自己的小车,又得咬牙切齿的投入今天的工作!

每天为了挑起学习、工作的动力,都要做一番战前动员思想工作!(思想觉悟还有待提高)

四.对象与集合初始化器:

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;}
publicstring 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;}
publicstring 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=newList<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/archive/2008/09/25/2977138.aspx

分享到:
评论

相关推荐

    C#3.0新语法总结

    C#3.0中自动属性,新的对象初始化器,新的集合初始化器,扩展方法,推断类型等属性的总节。

    C#特性-对象集合初始化器介绍

    C# 3.0为你提供了对象集合初始化器: /// /// 图书类 /// public class Book { /// /// 图书名称 /// public string Title { get; set; } /// /// 单价 /// public float Price { get; set; } /// ...

    c#3.0语言规范高清PDF

    1.6 类和对象 ................................................................................................................................................... 12 1.6.1 成员 ............................

    C#从入门到实践源码

    重点包含C# 3.0中的面向对象编程技术和常用的扩展技术,如类、结构、数组、接口、委托、事件、异常处理、泛型、分部类型、可空类型、隐型变量、对象和集合初始化器、迭代器、匿名类型、扩展方法、Lambda表达式、LINQ...

    Manning.C.Sharp.in.Depth.Apr.2008

    本书用一整章的篇幅介绍了用于LINQ(语言级集成查询)的秘诀,并用额外两章介绍了使用扩展方法的秘诀,还介绍了lambda表达式、对象和集合初始化器、新的同步原语以及LINQ to XML等。本书中的每个秘诀都提供了对单个...

    Entity Framework 教程

    对象初始化器与集合初始化器 3 匿名类 3 扩展方法 4 Lambda表达式 4 .NET中的数据访问 4 DataSet方案 5 改进的的DataSet方案 5 手写代码通过ADO.NET2.0连接类与数据库交互 5 ORM – LINQ to SQL 6 深入了解...

    C#语言规范(2.0,3.0,4.0合集)

    这个是C#语言规范2.0,3.0,4.0的合集,是关于 C# 语法的权威资料。它们包含该语言各个方面的详细信息,包括 Visual C# 产品文档未涉及的许多语法点。 4.0目录 1. 简介 1 1.1 Hello world 1 1.2 程序结构 2 1.3 ...

    ADO.NET Entity Framework 教程

    对象初始化器与集合初始化器 3  匿名类 3  扩展方法 4  Lambda表达式 4  .NET中的数据访问 4  DataSet方案 5  改进的的DataSet方案 5  手写代码通过ADO.NET2.0连接类与数据库交互 5  ORM – LINQ...

    CLR.via.C#.(中文第3版)(自制详细书签)

    10.1.3 对象和集合初始化器 10.1.4 匿名类型 10.1.5 System.Tuple类型 10.2 有参属性 10.3 调用属性访问器方法时的性能 10.4 属性访问器的可访问性 10.5 泛型属性访问器方法 第11章 事件 11.1 设计要公开...

    C# for CSDN 乱七八糟的看不懂

    因 此在赋值后应该及时销毁或者初始化 L2,以免发生不可预见的错误。 比较 使用 Contains 方法。 ArrayList Array1=new ArrayList(); Array1.Add("as"); bool b1=Array1.Contains("as"); MessageBox.Show(b1....

    vc++ 开发实例源码包

    内部包含了atl控件的开发以及如何应用,演示了COM的包容与集合、自动化、事件和连接点、枚举器和集合以及线程管理等等。 ATL实现的CDHtmlDialog模板类v1.03 使用了六个类五个模块类演示了atl的调用方法 class ...

    ExtAspNet_v2.3.2_dll

    -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -Window...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -Window...

Global site tag (gtag.js) - Google Analytics