王朝网络
分享
 
 
 

Orcas版C#3.0的新特性

王朝c#·作者佚名  2008-05-31
宽屏版  字体: |||超大  

自从微软March CTP版本的Visual Studio和.NET Framework “Orcas”发布以来,许多博客作家都在考察和评论这一版本在run-time macros和code metrics等方面的新特性。

近日,微软Asp.Net 和Ajax开发部的头脑Scott Guthrie又在其博客中发布了C# 3.0的一些新特性。其文中重点提及的C#3.0的新特性如下:

Automatic properties——自动属性

Orcas 版的C#可以自动建立私有域和默认的get/set函数,而不必由用户手工声明私有域和手工建立get/set函数。如:我们使用以前的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;

}

}

}

使用Orcas 版的C#后我们可以利用其自动属性功能重写如上代码如下:

以下是引用片段:

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;

}

}

当C# “Orcas”编译器碰到一个如上所示的空白的get/set property implementation时,它将会在你的类中自动产生一个私有域,同时实现一个公共的getter and setter property implementation。这样做的好处是,从type-contract的角度看,类似乎使用了上述第一段代码中的执行(implementation)。这就意味着,与公共领域不同,我们将来可以在property setter implementation中添加验证逻辑,而不需要改变任何与类相关的外部组件。

Object Initializers——对象初始化器

本初始化器可以促进编译器自动生成property setter代码,由此可为用户省略了几行硬代码的编写。.NET Framework中的Types依靠于properties的使用。在初始化和使用一个新类时,开发人员通常要写出如下代码:

以下是引用片段:

Person person = new Person();

person.FirstName = "Scott";

person.LastName = "Guthrie";

person.Age = 32;

你是否曾经想过使这一代码变得更加简洁,也许只用一行就可以实现?使用C# 和VB “Orcas”编译器,你可以充分利用名为“object Initializers”的“syntactic sugar”语言特征使以上代码简化如下:

以下是引用片段:

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

编译器将会自动产生合适的property setter代码来保持与上述具体代码段同样的语义。

对象初始化器不仅可在初时化类型时设置简单的属性值,而且答应我们随意设置更复杂嵌套的属性类型。比如,假设我们上述定义的每个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

}

};

Collection Initializers——集合初始化器

这一新特性与上述特性基本相同,唯一不同之处在于它作用于集合。对象初始化器功能强大可以帮助开发人员更加轻易且简洁的添加对象到集合中。例如,假如我想添加三个people到一个“Person”类型的generics-based List集合中,我们可以用以下代码实现:

以下是引用片段:

List people = new List();

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条额外代码的编写。

C# and VB “Orcas”编译器不仅使我们在对象的声明和初始化方面更加简单,而且支持“collection initializers”可以使我们避免成倍的Add语句,同时节省更多的击键次数:

以下是引用片段:

List people = new List ...{

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

new Person ...{ FirstName = "Bill", LastName = "Gates", Age = 50 },

new Person ...{ FirstName = "Susanne", LastName = "Guthrie", Age = 32 }

};

当编译器碰到如上语法,它将自动产生集合插入代码,就像如上所示拥有更详尽Add语句的代码段一般。

总之,作为开发人员,我们现在拥有更加简洁的方式来定义对象,初始化他们,然后添加他们到集合。在运行时,它所表达的语义将和今天所书写的具体语法一样正确,因此你不必担心任何行为上的变化。同时,现在你不必书写更多的代码,你的代码将变得更加简洁明了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有