C# 3.0 的新特性还是比较多的,下面选几处记下。
自动属性(Auto-Implemented Properties)
在 .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; } } }
.net 3.0 的“自动属性”特性允许这样定义User类。
public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }
顾名思义,一部分代码有系统“自动化”实现了。
隐含类型局部变量(Local Variable Type Inference)与匿名类型(Anonymous Types)
var i = 5;//int var j = 23.56;//double var k = "C Sharp";//string var x;//错误 var y = null;//错误 var z = { 1, 2, 3 };//错误 //匿名类型 var p1 = new { Id = 1, Name = "YJingLee", Age = 22 };//属性也不需要申明 var p2 = new { Id = 2, Name = "XieQing", Age = 25 }; p1 = p2;//p1,p2结构相同,可以互相赋值 var intArray = new[] { 2, 3, 5, 6 };//array var strArray = new[] { "Hello", "World" };//array //object array 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)
User user = new User { Id = 1, Name = "YJingLee", Age = 22 }; User user2 = new User { Id = 2, Name = "XieQing", Age = 25 }; //还可以给User类额外增加嵌套(nested)属性类型Address User user = new User { Id = 1, Name = "YJingLee", Age = 22, Address = new Address { City = "NanJing", Zip = 21000 } }; List<User> user = new List<User>{ new User{Id=1,Name="YJingLee",Age=22}, new User{Id=2,Name="XieQing",Age=25}, };
扩展方法(Extension Methods)
public static class Extensions//静态类 { public static bool IsValidEmailAddress(this string s) //静态方法和this { Regex regex = new Regex(@"^[w-.]+@([w-]+.)+[w-]{2,4}$"); return regex.IsMatch(s); } }
string 前的 this 表示是对 string 的扩展方法追加。之后 string 类型就有了一个 IsValidEmailAddress 方法。虽强大,但要慎重使用。