C#3.0新特性
- @Extension method
-
public static class Extecsions扩展方法的本质将实例方法调用在编译期改变为静态类中静态方法的调用。
{
public static string Foo(this string s)
{
return s + " is called by Foo";
}
} - 现有实例方法的优先级最高->最近NAMESPACE中静态方法->较远NAMESPACE 中的静态方法
- 它是一个编译时技术
- 在不改变源代码的前提下扩展现有类型中的实例方法
- tip
- 编译器在编译时并不是跟我们平时看到的一样面像对像,二进制代码并不知道类与实例方法,
- class Persion{public void Bar(){........}},
Persion p = new Persion();p.Bar在调用的时候实际上是Bar(p),也是就第一个实例函数都有一个隐含的本实例指针,跟扩展函数的定义比较,实际上是一样的
- @对像与集合初使化器 ---没有对类型进行更改,并且须要有一个无参的构造函数
- 对像初使化器: var a = new Point{x = 0, y=1}; 等价于 var a= new Point(); a.x=0;a.y=1;
- 只能是字段,属性并且对外可见,按序赋值,并且不一定全部初使化
- 集合初使化器: list<int> num = new list<int>{1,2,3,4};
- 集合初使化器对初使化器中的元素进行按序调用ICollection<T>.Add(T)
- @匿名类型
- var用来定义, var p = new {name = "1",age=1};
- 匿名类型直接继承自System.Object
- 成员是编译器跟据初使化器推断出来的一些读写属性