Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器(2)
作者:Scott Guthrie 来源:Scott Guthrie博客中文版 发布时间:2007-09-23 12:43:00
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


猜你喜欢
- 本文实例讲述了Python操作Sql Server 2008数据库的方法。分享给大家供大家参考,具体如下:最近由于公司的一个项目需要,需要使
- 这个程序将记数器的数字放在ACCESS数据库中,当然你也能用你希望其它的ODBC数据源.这个程序从URL中读取记数信息.如下:< IM
- linux中,可以使用指令pip install lmdb安装lmdb包。----lmdb 数据库文件生成增 改 删查1、生成一个空的lmd
- 1、使用好处提高性能:由于减去了大量新建终止线程的费用,重用了线程资源;适用场景:适用于处理大量突发请求或需要大量线程完成任务,但实际任务处
- 方法一一、桌面右击,点击“Git Bash Here”二、在弹出的黑窗口,右击,选择&ldq
- 发现这个也是偶然,在测试的时候发现的,因此问题还发现一个bug。蛮有意思~ 假如输入http://www.aspxhome.com的话,在
- Python配对函数zip()1、zip将列表、元组或其他序列的元素进行配对新建成一个元组构成的列表,它生成列表长度由最短的序列决定:#zi
- 这篇文章主要介绍了Python监控服务器实用工具psutil使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 和以往的总监会议一样,在某个新功能的总监级别讨论会上,很多人再次又说出了同样的看法:“我们网站的界面设计太烂了,不好看、不好用、而且很乱”。
- <P><html><head><meta http-equiv="Content-Typ
- PyMongo下载PyMongo下载地址:http://pypi.python.org/pypi/pymongo/#downloads当前可
- CentOS升级Python2.6到Pythno2.7最近在Linode上弄Python、出现ValueError: zero length
- 导语小伙伴们大家好~如今的游戏可谓是层出不穷,NBA 2K系列啊,FIFA系列啊更是经典中的经典,不过小编发现,赛车游戏也是深受大家欢迎啊,
- 本文讲述了python安装mysql-python的方法。分享给大家供大家参考,具体如下:ubuntu 系统下进行的操作首先安装了pip工具
- 本文实例为大家分享了vue实现购物车加减的具体代码,供大家参考,具体内容如下通常我们会在模板中绑定表达式,模板是用来描述视图结构的。如果模板
- 环境centos7django 1.11nginx白话我们可以使用Template 设置我们的网页,同时,一个完美的网页需要css,js,i
- 导语:用 Python 读取图片的像素值,然后输出到 Excel 表格中,最终形成一幅像素画,也就是电子版的十字绣了。基本思路实现这个需求的
- 前言昨天主管突然给我说微信小程序默认的 tabBar 不美观,让我改成中间突出的那种样式。纵然我心里面有千般不情愿,但还是接下了这个任务。查
- 如何准确获知对方来访问的时间和URL?代码如下:logfile.asp<%Dim ValidLog '&n
- 中介者模式中介者模式(Mediator Pattern)是一种常用的设计模式,用于解决各个对象之间的复杂依赖关系,使得各个对象之间可以独立地