Orcas中C#语言的新特性:自动属性,对象初始化器,和集合初始化器
作者:Scott Guthrie 来源:Scott Guthrie博客中文版 发布时间:2007-09-23 12:43:00
【原文地址】New C# "Orcas" Language Features: Automatic Properties, Object Initializers, and Collection Initializers
【原文发表日期】 Thursday, March 08, 2007 11:01 PM
上个星期,我们发布了我们的Visual Studio和.NET框架Orcas版三月份的CTP,这是个谁都可以下的免费下载,同时提供VPC镜像(允许你在一个虚拟机里运行它)以及单独的安装文件(注:如果你在运行Vista的话,你要确认你只使用VPC版本)。你可以在这里下载。
几个星期前,我曾在博客上讨论过Orcas中针对ASP.NET开发人员的一些重大的改进。如果你还没有读过这个贴子的话,我强烈建议你在这里读一下。我认为你会非常喜欢该帖子讨论的新特性的。
除了那些框架和工具类的精彩新特性外,我认为开发人员(包括所有的.NET应用类型的开发人员)会非常喜爱Orcas的一件事情是,VB和C#将包含一些新语言特性和改进。这些语言改动将以既微妙又深刻的方式改进我们的开发体验,势将改进效率,减小我们需要键入的代码量。
在下几个星期里,我将试着在博客里讨论几个这些语言的改进之处,示范如何把它们使用在一起,来产生一些非常强有力的结果。
新的C#语言特性:自动属性(Automatic Properties)
如果你现在是C#开发人员的话,你大概非常习惯编写象下面这个代码片段一样带有基本属性的类型:
public class Person {
private string _firstName;
private string _lastName;
private int _age;
public string FirstName {
get {
return _firstName;
}
set {
_firstName = value;
}
}
public string LastName {
get {
return _lastName;
}
set {
_lastName = value;
}
}
public int Age {
get {
return _age;
}
set {
_age = value;
}
}
}
注意,我们在属性的geter/setter中实际上并没有添加什么逻辑,我们只是将get/set实施到了一个成员变量。我们不禁要问这样一个问题:为什么不直接使用成员变量而使用属性呢?这是因为,向外面呈现公开的成员变量有很多不好的地方。二个最大的问题是:1) 你无法轻易地对成员变量做数据绑定,2) 如果你从类中向外呈现成员变量的话,之后,你不重新编译那些引用老的类的任何程序集,就无法将它们改成属性(譬如,要添加验证逻辑到setter里)。
Orcas中发布的新C#编译器通过一个叫“自动属性(automatic properties)”的语言特性提供了一个优雅的方式来使得你的编码更加简洁,同时还保持属性的灵活性。自动属性允许你避免手工声明一个私有成员变量以及编写get/set逻辑,取而代之的是,编译器会自动为你生成一个私有变量和默认的get/set 操作。
譬如,使用自动属性,我现在可以将上面的代码改写成:
public class Person {
public string FirstName {
get; set;
}
public string LastName {
get; set;
}
public int Age {
get; set;
}
}
或者,我想更简明的话,我可以将空白的地方做进一步压缩,象这样:
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
当Orcas版中的C#编译器遇上象上面这样的空的get/set属性的话,它会自动为你在类中生成一个私有成员变量,对这个变量实现一个公开的getter 和setter。这么做的好处是,从类-合同(type-contract)的角度来看,这个类跟我们上面第一个有点冗长的实现看上去完全一样,这意味着,不象公开的成员变量,在将来,我可以在我的属性setter实现中添加验证逻辑,而不用对引用我的类的任何外部组件做改动。
Bart De Smet对使用Orcas三月份CTP版中的自动属性时内部发生的情形作了精彩的描述,你可以在这里阅读他的精彩相关帖子。
猜你喜欢
- 首先,大家先去下载一份dvbbs.php beta1的代码,解压后先抛开php代码,找出你的mysql手册,如果没有手册那么就直接看下面的实
- 翻译:ShiningRay简介你是否知道JavaScript其实也是一个函数式编程语言呢?本指南将教你如何利用JavaScript的函数式特
- 搜索引擎是通过分析网页源代码来分析页面文本信息的逻辑性,所以在编写网页代码的时候一定要尽可能使用合适的标签来体现文本表达的层次感,也即是让搜
- 摘要: Portal是IT领域的新技术,是企业信息化工作的发展方向之一。本文首先介绍了Oracle Portal的定义、特点,接着阐述了po
- 每周的《午间欢乐购》和《周末疯狂购》,已经成为视觉组的固定需求。从开始接触到现在5个月的时间里,思维也和这些小小banner逐渐碰撞出火花。
- 优雅的设计经常包含一些特殊的字体,而这些字体并不存在于用户的字体库中,我们并不能奢求每一个访客都是设计师。 :-)虽然CSS3标
- 如何选择速度最快的站点? <html><head><meta http-equiv=&qu
- 最近网上流行着一些采集程序,更多人拿着这些东西在网上叫卖,很多不太懂的人看着那些程序眼羡,其实如果你懂一些ASP,了解自动采集程序的原理后,
- 从CNNIC在2009年的报告中可以看到,超过80%的网民购物之前都要看评论(包括本站、其他站评论),超过80%的网民都比较信任口碑(包括网
- 我的机器不知为何,安装MySQL的时候,一到配置那一步就无休止的等待,只好结束任务,然而启动MySQL的时候出现1067错误提示
- 很多时候,由于程序设计需要,要求在asp的include包含文件里调用动态的文件。如<!--#include file=&q
- Server对象提供对服务器上访问的方法和属性.大多数方法和属性是作为实用程序的功能提供的。语法:Server.property|metho
- 性能首先,FCKEDITOR的性能是非常好的,用户只需很少的时间就可以载入FCKEDITOR所需文件.对于其他在线编辑器来说,这几乎是个很难
- 学习目的: 掌握ADO.NET打开SQL SERVER数据库的方法。 今天做个非常普通的例子,做一个用户登录框。主要是通过这个练习认识一下S
- 在本身比较复杂的页面里,再突出信息,往往是把几种方法叠加起来使用,比如加粗加大、加粗加色等,区别在于使用的类别和程度。导致的结果是呈现越来越
- 以前写过一个标签效果,外观虽然好看,但代码不太规范,实现的方法比较繁冗。需要注意的是标签的背景图,两种状态,激活的标签背景为蓝色,反之为灰色
- 有过网页制作经验的朋友一定知道:一般来讲,把表格的边框定义为1px时,即border=1,而实际上是2
- Aptana IDE现在已经被重命名为Aptana Studio,这款IDE的背后有着风险投资的支持,旨在给Web开发者
- 用途:将UTF-8编码汉字转换为GB2312码,兼容英文和数字版权:虽说是原创,其实也参考了別人的部分算法asp源代码:<% 
- 判断字符串长度函数:<SCRIPT LANGUAGE="JavaScript"><!--fu