在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
总体来说,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新语言特性和改进包括:
自动属性可以避免原来这样我们手工声明一个私有成员变量以及编写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;//int var j = 23.56;//double var k = "C Sharp";//string var x;// ╳ var y = null;//╳ var z = { 1, 2, 3 };//╳ 在调试状态下,编译器解释如下 隐含类型局部变量要点
匿名类型(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; 匿名类型要点
对象与集合初始化器(Object and Collection Initializers)对象初始化器 (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):集合初始化器由一系列集合对象组成,用逗号间隔,使用{}封闭。 List<int> num = new List<int> { 0, 1, 2, 6, 7, 8, 9 }; 对象与集合初始化器要点
|
请发表评论