CSharpThinking---C#3 革新(附加二)
本章主要讨论C#3较C#2的一些革新,其中大多数革新所体现的新特性是为Linq服务的,但本章不打算单独讨论,会在后面详细说明。
一,自动实现的属性
1.1 意义:是开发者不必再写出由字段直接提供的简单属性。
1.2 优缺点:使用自动属性可以简洁那些不做内部校验的属性,C#编译器支持简洁的{get;set;}表达方式。不足之处是:不能方便的设置初始值。
1 public string Name 2 { 3 get; 4 private set; 5 }
二,隐式类型的局部变量
2.1 意义:根据初始值判断变量的类型,从而简化局部变量的声明。重点在于隐式类型并没有使C#称为动态或者弱类型的语言。
var在使用时完全是编译器在编译前已“明确的”,“唯一的”生成相应的类型变量,而不是可变的。
2.2 隐式类型的限制:
1) 被声明的变量时一个局部变量。
2) 变量在声明的同时被初始化。
3) 初始化表达式不是一个方法组,也不是一个匿名函数。
4) 初始化表达式不是Null。
5) 语言中值声明了一个变量。
6) 你希望变量拥有的类型是初始化表达式的编译时的类型。
7) 初始化表达式不包含正在声明的变量。
2.3 优缺点:
优点---减少屏幕上的代码量及改变了代码重心(更多的关注右侧类型)。
缺点---可读性变差。
三,对象和集合初始化程序
3.1 意义:用简单的表达式来初始化对象。
3.2 支持集合初始化及嵌套类型的集合初始化,如内部嵌套类型不在另外使用的话(不关注初始化的数据另外使用),则此初始化更清晰的表达了数据及初始化过程。
1 Person tom = new Person 2 { 3 Name = "Tom", 4 Home = { Town = "Reading",Country = "UK" }, // 初始化嵌入对象 5 Friends = // 更进一步的对象初始化器 6 { 7 new Person{ Name = "Alberto"}, 8 new Person{ "Max"}, 9 new Person("Alice") 10 { 11 Home = { Town = "Twyford", Country = "UK"}, 12 } 13 } 14 } 15 ... 16 17 public class Person 18 { 19 public string Name{get;set;} 20 private Loaction _Home = new Location(); 21 public Location Home{get {return _Home;}} 22 private List<Person> _Friends = new List<Person>(); 23 public List<Person> Friends { get { return _Friends;}} 24 25 public Person(string n) 26 { 27 Name = n; 28 } 29 } 30 ... 31 public class Loaction 32 { 33 public string Country{get;set;} 34 public string Town{get;set;} 35 }
四,隐式类型的数组
5.1 意义:代码简洁,前提是编译器得知道要初始化什么样的数组。
1 public void MyMethod(string[] name) 2 { 3 ... 4 } 5 ... 6 MyMethod({"Lily","Holly","Tom"}); // 错误:编译器不知道什么类型 7 MyMethod(new string[] {"Lily","Holly","Tom"}); // 正确:编译器确切的知道类型 8 MyMethod(new[] {"Lily","Holly","Tom"}); // 正确:编译器能清楚的推断出类型,大多数时候参数类型要相同,否则要进行强制转换。
作者:Stephen Cui
出处:http://www.cnblogs.com/cuiyansong
版权声明:文章属于本人及博客园共有,凡是没有标注[转载]的,请在文章末尾加入我的博客地址。
如果您觉得文章写的还不错,请点击“推荐一下”,谢谢。