- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NET35的新特性(前沿技术)
c#3.0介绍
C# 3.0(C# Orcas——魔鬼)在C# 2.0的基础上引入了很多语言扩展,用以支持高级别的函数式风格类库的创建和使用。这些扩展使得结构性API构造具有与其他领域(如关系数据库和XML)中查询语言同等的表达能力。这些扩展包括:
隐式类型,允许通过用于初始化的表达式来推断局部变量的类型。
扩展方法,使得对一个现存类型的扩展和构造具有附加方法的类型变为现实。
拉姆达(Lambda)表达式,匿名方法的一种进化,为委托类型和表达式树提供了改进的类型推断和转换。
自动属性,完成对属性的封装
对象初始化器,使得构造和初始化对象变得容易。
匿名类型,由对象初始化器推断和创建出来的类型。
集合初始化载器,从数组初始化器推断出元素类型并进行创建和初始化的数组。
查询表达式,提供了集成的查询语法,与关系、分级查询语言如SQL和XQuery类似。
表达式树,允许将拉姆达表达式表现为数据(表达式树),而不是代码(委托)。
c#3.0c#3.5新特性
隐式类型变量
对于熟悉多态语言的人来说,var关键字并不陌生,在JavaScript脚本中随处可见通过var声明的变量,现在在c#3.0也引入了var关键字,用语定于隐式类型或隐式类型数组,例如:
var user = new User { Name = 张三, Age = 20 };
var intArray = { 3, 6, 8, 1, 0, 11 };
var i = 10;
var s = 张三;
for语句的for-initializer和using语句的resource-acquisition可以是一个具有隐式类型的局部变量声明。同样,foreach语句中的迭代变量也可以被声明为具有隐式类型的局部变量,在这种情况下,迭代变量的类型通过待遍历的集合的元素类型来推断。
int[] numbers = { 1, 3, 5, 7, 9 };
foreach (var n in numbers)
Console.WriteLine(n);
规则小结:
实现类型必须进行初始化,而且值不能为null,或者类型不定的表达式,否则编译器无法解析其类型
隐式数组类型在初始化时,必须保证各个元素为同一类型
隐式类型仍为强类型,只是类型的声明由编译器完成。
匿名类型
C# 3.0允许将new运算符用于一个匿名对象初始化器来创建一个匿名类型的对象。
一个匿名对象初始化器声明了一个匿名类型并返回了该类型的一个实例。匿名类型是一个没有名字并且直接继承自object的类类型。匿名类型的成员是一系列可读/写属性,这些属性依次通过创建该类型的实例时使用的对象初始化器进行推断。特殊地,具有下面形式的一个匿名对象初始化器:
var m = new { Name = 张三, Sex = 男, Age = 20 }; 在同一个程序中,两个具有相同名字、相同类型和相同顺序的属性的匿名对象初始化器将产生同一个匿名类型的实例。
下面的例子:
var p1 = new { Name = Lawnmower, Price = 495.00 };
var p2 = new { Name = Shovel, Price = 26.95 };
p1 = p2; 其中最后一行中的赋值是允许的,因为p1和p2具有相同的匿名类型。
类初始化器
对象初始化本来是构造器的专职工作,但是有时候对于没有在构造其中完成的初始化的成员,还可以通过赋值方式来完成。我们看下面的例子
2.0的方式
对于对象的初始化,在2.0主要通过以下方式实现
User user = new User();
user.Name = 张三;
user.Age = 20; 3.0方式
在3.0中,实现对象初始化有了更好的解决方案,有对象初始化器完成
User u = new User {Name=”张三”,Age=20}; 代码是不是很优美,很简洁,这就是c#3.0中激动人心的特性
Visual Studio2008的智能感知能够自动识别其成员,在初始化器中进行初始化的没有顺序要求,而且不要求初始化所有成员,你可以感觉选择识别,如下图
集合初始化载器
对象初始化器可以完成对象成员的初始化,而同样的情况存在于对集合对象的初始化过程,不过这两个过程其实是有区别的。C#3.0中引入集合初始化器来完成
2.0方式
在2.0中,集合元素通过Add方法来加入:
ListUser users = new ListUser();
users.Add(new User(张三,20));
users.Add(new User(李四, 18));
users.Add(new User(王五, 19)); 3.0方式
ListUser users = new List
文档评论(0)