网络编程
位置:首页>> 网络编程>> ASP.NET>> Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器(2)

Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器(2)

作者:Scott Guthrie 来源:Scott Guthrie博客中文版 发布时间:2007-09-23 12:43:00 

标签:Orcas,c#

C#和VB语言的新特性:对象初始化器(Object Initializers)

.NET框架中的类型非常依赖于属性的使用。当生成对象实例和使用新的类型时,写出象下面这样的编码是非常常见的情形:


   Person person = new Person();
   person.FirstName = "Scott";
   person.LastName = "Guthrie";
   person.Age = 32; 



你有没有想要把这样的编码简化过(也许将其安排在一行上)?使用Orcas中的C#和VB语言编译器的话,你现在可以利用一个称为“对象初始化器(object Initializers)”的“语法甜头(syntactic sugar)”语言特性来做些简化,将上述代码重写为:


  Person person = new Person { FirstName="Scott", LastName="Guthrie", Age=32 };

 



然后,编译器就会自动地生成合适的属性setter代码,保持跟前面较冗长的代码例子同样的语意。

除了在初始化类时设置简单的属性值外,对象初始化器特性也允许我们设置更复杂的嵌套(nested)属性类型。譬如,假如我们在上面定义的每个Person类型也拥有一个属于Address类型的叫“Address”的属性。我们可以编写下面这样的代码来生成一个新的Person对象,同时设置它的属性,象这样:


   Person person = new Person {
      FirstName = "Scott",
      LastName = "Guthrie"
      Age = 32,
      Address = new Address {
         Street = "One Microsoft Way",
         City = "Redmond",
         State = "WA",
         Zip = 98052
      }
   }; 



Bart De Smet对使用Orcas三月份CTP版中的对象初始化器时内部发生的情形也作了精彩的描述,你可以在这里阅读他的精彩相关帖子

C#和VB语言的新特性:集合初始化器(Collection Initializers)

对象初始化器很棒,它极大地简化了把对象添加到集合的做法。譬如,假如我要把三个人加到一个基于泛型的类型为Person的List集合中去的话,我可以写下面这样的编码:


  List<Person> people = new List<Person>();
            
  people.Add( new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32 } );
  people.Add( new Person { FirstName = "Bill", LastName = "Gates", Age = 50 } );
  people.Add( new Person { FirstName = "Susanne", LastName = "Guthrie", Age = 32 } );
  



对这个例子,跟我使用C# 2.0编译器要输入的代码相比,单独使用新的对象初始化器特性就能省去12行额外的代码。

但Orcas版中的C#和VB编译器允许我们更进一步,现在同时支持“集合初始化器(collection initializers)”,这允许我们避免要写多个Add语句,省下更多的键盘操作:


   List<Person> people = new List<Person> {
      new Person { FirstName = "Scott", LastName = "Guthrie", Age = 32 },
      new Person { FirstName = "Bill", LastName = "Gates", Age = 50 },
      new Person { FirstName = "Susanne", LastName = "Guthrie", Age = 32 }
   }; 



当编译器遇上上面这样的句法时,它会自动为我们生成象前面的例子一样的集合插入编码。

结语

作为开发人员,我们现在拥有了简明得多的方式来定义对象,对它们初始化,将它们加入集合内。在运行时,其语意,跟今天的较长的版本的语意,是完全一样的(所以你不必担心行为会改变)。但现在你不需输入那么多字符了,你的代码将既干净又简明。

在不远的将来,我将发表更多的博客贴子来讨论Orcas版中更多的语言上的改进,包括扩展方法(Extension Methods),Lambdas和匿名类。然后,我将对LINQ做深入讨论,示范它是如何利用所有这些特性来提供一个非常优雅的方式来查询和与数据交互的。

希望本文对你有所帮助,

Scott

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com