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

标签:Orcas,c#
0
投稿

猜你喜欢

  • yui3的AOP(面向切面编程)和OOP(面向对象编程)

    2009-09-24 14:47:00
  • asp如何制作一个简单的翻页程序?

    2010-06-29 21:26:00
  • 元素层叠级别及z-index剖析

    2008-07-22 12:03:00
  • 一个较新的ASP后门服务端实现代码

    2011-02-16 10:41:00
  • 教程:mysql申明变量以及赋值

    2009-10-26 10:31:00
  • MYSQL教程:数据列类型与查询效率

    2009-02-27 15:37:00
  • js 仿Photoshop鼠标滚轮控制输入框取值(修正兼容Chrome)

    2010-02-05 12:27:00
  • sqlserver中去除字符串中连续的分隔符的sql语句

    2012-06-06 20:07:39
  • IE10增强对HTML5和CSS3的支持

    2011-09-16 20:16:28
  • SQL Server连接中经常出现的3个常见错误与解答

    2010-07-26 14:25:00
  • 交互设计实用指南系列(4)—“有效性”之“简洁清晰,自然易懂”

    2010-01-05 16:52:00
  • Linux mysql安装修改root密码服务

    2010-10-14 13:59:00
  • Js实现仿msn的右下角popup提示窗口

    2007-12-27 20:30:00
  • 浏览器tab的设计

    2008-08-11 13:03:00
  • 如何创建CSS的对象,获取合适的粒度

    2010-07-09 13:10:00
  • 初学ASP编程易犯的一个错误要注意

    2008-11-07 15:08:00
  • 扩展数据库系统选项实现更高的可扩展性

    2009-01-06 11:14:00
  • 客户端数据存储–超越cookies

    2008-01-15 13:01:00
  • MySQL数据库在Linux下二进制日志恢复方法

    2009-07-30 08:55:00
  • sqlserver数据库主键的生成方式小结(sqlserver,mysql)

    2012-08-21 10:25:45
  • asp之家 网络编程 m.aspxhome.com