通过最近的学习,总结了以下一部分C#3.0中新增加的功能,供大家学习,呵呵~~
(1)隐含类型局部变量:
1) var为关键字,可以根据后面的初始化语句自动推断类型;
2) 初始化语句必须为表达式,且编译时可以推断类型;
3) Var声明的仅限于局部变量,也可以用于foreach,using等语句中;
4) 数组也可以作为隐含类型;
(2)扩展方法:
扩展方法允许我们在不改变源代码的情况下扩展(即添加)现有类型中的实例方法。
Eg:
Public static class Extensions{//类型是什么都可以,但是必须是静态类。
Public static void Foo(this string s){
……
}
}
String s=”aaa”;
s.Foo();//调用了扩展方法Foo();
以前的可以扩展的办法由三种:
继承一个类可以扩展它;用包含(组合)的方法来扩展;用反射的方法来扩展;
扩展方法要点:
本质是将实例方法调用在编译期改变为静态类中的静态方法调用;
注意扩展方法的优先级:现有实例方法优先级最高,其次为最近的namespace下的静态类的静态方法,最后为较远的namespace下的静态类的静态类的静态方法;
扩展方法是一种编译时技术,注意与反射等运行时技术进行区别,并慎重使用。
(3)对象与集合初始化器:
Public class Point{
Int x,y;
Public int X{get{return x;}set{x=value;}}
Public int Y{get{return y;}set{y=value;}}
}
Var a=new Point{X=0,Y=1};
相当于:var a=new Point();a.X=0;a.Y=1;
集合初始化器:
List<int> num=new List<int>{0,1,2,3,4};
对象与初始化器要点:
对象初始化器实际上利用了编译器对对象中对外可见的字段和属性进行按序赋值;
集合初始化器会对初始化器中的元素进行按序调用ICollection<T>.Add(T);
注意对象初始化器和集合初始化器中成员的可见性和调用顺序;
对象与集合初始化器同样是一种编译时技术。
(4)匿名类型:
可以使用new关键字调用匿名初始化器创建一个匿名类型的对象;
匿名类型直接继承自System.Object;
匿名类型的成员是编译器根据初始化器推断而来的一些读写属性。
本文转自 王祖康 51CTO博客,原文链接:http://blog.51cto.com/wzk89/403741,如需转载请自行联系原作者