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版中的自动属性时内部发生的情形作了精彩的描述,你可以在这里阅读他的精彩相关帖子。


猜你喜欢
- TihuanWords.txt文档格式注意:同一行的词用单个空格隔开,每行第一个词为同行词的替换词。年休假 年假 年休究竟 到底回家场景 我
- 没有使用队列,也没有线程池还在学习只是多线程 #coding:utf8 import urllib2,sys,re import threa
- 多元函数拟合。如 电视机和收音机价格多销售额的影响,此时自变量有两个。python 解法:import numpy as npimport
- Django学习笔记-学生管理系统(Django实现)笔记中仅实现了对数据的全部查询。下面实现新增、删除、修改,代码如下。下面的代码没有对输
- 如同这个数据结构的名称所说的那样,它记录了每个键值对添加的顺序。d = OrderedDict()d['a'] = 1d[&
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 本文实例形式较为详细的讲述了Python socket编程。分享给大家供大家参考。具体如下:sock=socket.socket(socke
- 本文实例讲述了Go语言中错误处理的方法。分享给大家供大家参考。具体分析如下:错误是可以用字符串描述自己的任何东西。 主要思路是由预定义的内建
- 前言在默认情况下,Python的新类和旧类的实例都有一个字典来存储属性值。这对于那些没有实例属性的对象来说太浪费空间了,当需要创建大量实例的
- 前言前面几个章节我们学习了对于普通文件的操作,比如说文件的创建、复制粘贴、裁剪粘贴、文件名的重命名、删除等等。另外还学习了一些基本练习,如何
- 问题描述有时候,产品让我们做的表格,会有合并列的功能,但是官方的demo略有不清晰,本文举个例子简述之。我们先看下效果图:假设产品的需求是这
- 如下所示:将不想索引的文件夹设置为Excluded Folders 及设置检索不包括的文件File - Settings - -> P
- 一、引入必要文件下载地址:(https://github.com/nghuuphuoc/bootstrapvalidator/archive
- 一、效果展示话不多说先上效果为了更有意境我加了个完美的背景来衬托出月饼的好看我的月饼画的不圆的原因是我故意的,为什么呢?因为月有阴晴圆缺啊!
- 本文实例讲述了Python 类的魔法属性用法。分享给大家供大家参考,具体如下:魔法属性无论人或事物往往都有不按套路出牌的情况,Python的
- 调用百度API获取经纬度信息。import requestsimport jsonaddress = input('请输入地点:
- XML有很多相关的技术,将这些技术结合起来,才能充分发挥XML的强大功能。这些技术包括:Xlink与Xpointer(设置XML的超链接)、
- 翻译:用法:zeros(shape, dtype=float, order='C')返回:返回来一个给定形状和类型的用0填充
- 前言容器数据类型包括数组list,字典dict以及元组tuple等。本篇,将详细介绍ChainMap字典序列的使用。ChainMapChai
- 遍历pd.Series的index和value的方法如下,python built-in list的enumerate方法不管用for i,