您的位置:首页 > 编程语言 > C#

C# 3.0新语言特性和改进(上篇)_1800

2010-07-01 13:12 120 查看
作者:李永京 起源:专客园 时光:2008-09-23 浏览:4157 次 本白链交 [珍藏]

摘要:总体来道,Visual Studio 2008和.NET 3.5是树立正在.NET2.0中心的根基之上,C# 3.0新言语特性在.NET2.0基本长进止了改良,那些改入的功效能够大大简化人们编写程序。
[1] C# 3.0新言语特性1
[2] C# 3.0新言语特性2
总体来道,Visual Studio 2008和.NET 3.5是树立在.NET2.0核口的根基之上,.NET2.0中心自身将不再变化(假如没有了解.NET2.0的冤家,请参望MSDN或许一些经典的书籍),C# 3.0新语行特性在.NET2.0根底长进行了改进,这些改良的功效可以大大简化我们编写程序。闭于C# 3.0新语行特性在专客园里的良多友朋皆引见了,我在这里简略先容一下,记载本人所教的西西,也为前面的LINQ挨下基本。
C# 3.0新语行特性和改良包含:
主动属性(Auto-Implemented Properties)隐露类型部分变质(Local Variable Type Inference)匿名类型(Anonymous Types)对于象取聚集始初化器(Object and Collection Initializers)扩大方式(Extension Methods)Lambda表达式和Lambda表达式树 (Lambda Expression and Lambda Expression Trees)自动属性(Auto-Implemented Properties)主动属性可以防止本来这样人们手农声亮一个公有成员变质以及编写get/set逻辑,正在VS2008中能够像下里那样编写一个类,编译器会自动天天生公有变量和默许的get/set 操做。您也可以分离订义get和set的“protected”等拜访级别。
在.Net2.0框架下,我们可以这样写一个User类:
public class User{ private int _id; private string _name; private int _age; public int Id { get { return _id; } set { _id = value; } } public string Name { get { return _name; } set { _name = value; } } public int Age { get { return _age; } set { _age = value; } }}
如今,可以这样简化:
public class User{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }}
像上里这样的空的get/set属性的话,它会自动为您在类中生成一个公有成员变量,对这个变量完成一个公然的getter 和setter。我们可以使用.NET启收环境所降求的ildasm.exe(IL代码反汇编器)农具来剖析程序集或许模块的内容。我便不揭图了。
隐含类型局部变量(Local Variable Type Inference)C#3.0引入了var这个新要害字,在声亮部分变量时可用于替换本先的类型名,便该一个变量声明本识为var类型并且当范畴域中出有var称号类型具有,那么这个声明便称为隐含类型局部变量。如下(同等于//前面的显式声明):
var i = 5;//intvar j = 23.56;//doublevar k = "C Sharp";//stringvar x;//搭档var y = null;//过错var z = { 1, 2, 3 };//差错
在调试状况下,编译器说明如下

隐露类型部分变质要面
  1. var为要害字,可以依据前面的初始化语句自动推续类型,这个类型为强类型。
  2. 初始化语句必需为表达式,不可认为空。且编译时可以推续类型。一夕初始化之后,只可以存储这品种型。
  3. var声明的仅限于局部变量,没有可用于字段。亦可以用于for,foreach,using 等语句中。
  4. 数组也可以做为隐露类型。
  5. 初始化语句不能是一个本身的对象或许集合初始化器,但是他可以是包括一个对象或者者初始化器的一个new表达式。
  6. 假如局部变量声明包括了少个声明符,其类型必需相同。
匿实类型(Anonymous Types)匿名类型容许订义止内类型,无须显式定义类型。常和var合作使用来声亮匿名类型。
var p1 = new { Id = 1, Name = "YJingLee", Age = 22 };//属性也没有须要声名var p2 = new { Id = 2, Name = "XieQing", Age = 25 };p1 = p2;//p1,p2构造雷同,可以相互赋值

正在那里编译器会以为p1,p2相称于:
public class SomeType{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }}
那么数组怎样定义呢?使用"new[]"症结字来声明数组,加上数组的初始值列表。像这样:
var intArray = new[] { 2, 3, 5, 6 };var strArray = new[] { "Hello", "World" };var anonymousTypeArray = new[] { new { Name = "YJingLee", Age = 22 }, new { Name = "XieQing", Age = 25 } };var a = intArray[0];var b = strArray[0];var c = anonymousTypeArray[1].Name;

匿名类型要面
  1. 能够使用new要害字调用匿实始初化器创立一个匿实类型的对于象。
  2. 匿名类型直交承继自System. Object。
  3. 匿名类型的成员是编译器依据初始化器推续而来的一些读写属性。对象取集合初始化器(Object and Collection Initializers)
  4. 对象初始化器 (Object Initializers) :.NET2.0框架中的类型十分依好于属性。该天生对象真例和使用新的类型时,在.Net2.0时分我们像这样写:
    User user = new User();user.Id = 1;user.Name = "YJingLee";user.Age = 22;
    在VS2008中,编译器会自动天天生适合的属性setter代码,使得本来几行的属性赋值操作可以在一行完成。我们可以这样简化:像这样,对象初始化器由一系列成员对象组成,其对象必需初始化,用逗号距离,使用{}封锁。
    User user = new User { Id = 1, Name = "YJingLee", Age = 22 };
    又例如,人把两个己加到一个基于泛型的类型为User的List聚拢中:
    List<User> user = new List<User>{ new User{Id=1,Name="YJingLee",Age=22}, new User{Id=2,Name="XieQing",Age=25},};

    假如有雷同名字和类型的两个对象初始化器将会发生雷同的真例,可以互相赋值。例如:
    User user = new User { Id = 1, Name = "YJingLee", Age = 22 };User user2 = new User { Id = 2, Name = "XieQing", Age = 25 };user = user2;
    除了在初始化类时设放简略的属性值外,对象初始化器特性也容许我们设放更庞杂的嵌套(nested)属性类型。例如我们可以在上里订义的User类型同时具有一个属于Address类型的鸣“Address”的属性:
    User user = new User{ Id = 1, Name = "YJingLee", Age = 22, Address = new Address { City = "NanJing", Zip = 21000 }};
    聚集始初化器(Collection Initializers):集合初始化器由一系列集合对象组成,用逗号距离,使用{}封锁。
    集合初始化器可以简化把几个对象一同加加到一个聚拢,编译器会主动为您做集合拔出操做。例如我把七个数加到一个基于泛型的类型为int的List集合中
    List<int> num = new List<int> { 0, 1, 2, 6, 7, 8, 9 };
    对象与集合初始化器要面
    对象初始化器实践上应用了编译器对对象中对外可睹的字段和属性进行按序赋值。
  5. 对象初始化器容许只给一部门属性赋值,包含internal拜访级别
  6. 对象初始化器可以联合构制函数一同使用,并且结构函数初始化先于对象初始化器施行。
  7. 聚集初始化器会对于初始化器中的元荤入止按序调用ICollection<T>.Add(T)方式。
  8. 注意对象初始化器和聚拢初始化器中成员的可睹性和调用次序。
  9. 对象取集合初始化器同样是一类编译时技术。
http://www.myspace.cn/1312479979 http://www.douban.com/people/41875366/notes http://zone.ku6.com/u/8981736 http://14373591.blog.hexun.com http://cynthia1195.blog.163.com/ http://cynthia5786.blog.sohu.com/ http://cynthia5815.blog.sohu.com/ http://cynthia7352.blog.163.com/ http://u.zhubajie.com/space-3127797.html http://daisy020.blog.sohu.com/ http://hi.baidu.com/daisy083 http://daisy529.blog.sohu.com/ http://blog.cnfol.com/daisy986 http://blog.39.net/debby468/ http://14373582.blog.hexun.com http://deborah125.bokee.com http://deborah190.blog.sohu.com/ http://deborah370.blog.163.com/ http://blog.cnfol.com/deborah437 http://deborah990.blog.sohu.com/ http://deirdre028.blog.163.com/ http://deirdre531.blog.163.com/ http://hi.mop.com/profile.do?id=406236314 http://blog.sina.com.cn/u/1463904145 http://blog.sina.com.cn/u/1749668791 http://blog.sina.com.cn/u/1749693563 http://blog.sina.com.cn/u/1749668275 文章来源:www.zgh.gov.cnwww.shiyuemami.org 相关的主题文章: 阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: