**************************************************************
一、泛型(Generic) MS:http://msdn.microsoft.com/zh-cn/library/bb384067.aspx
概述:
引入泛型绝对是C#2.0的最大的新特性。通过“参数化类型”实现一份代码操作多种数据类型。泛型的优点是更好的类型安全;更好的复用;更高的效率和更清晰的约束。但说实在,除了一些通用的数据结构,集合类和通用算法外,使用到泛型的地方还不多。而且System.Collections.Generic中的类也很够用了。基本没写过自己的泛型类。
语法点:
语法方面主要是使用在类型名称后面加入“<T>”来传入类型参数。涉及泛型类型继承的一条规则是“封闭类(所有类型都已确定)不能继承开放类(含有未确定类型)”。同时可以使用where来添加对作为参数的类型的约束。具体有四种:基类约束、接口约束、构造器约束和值/引用类型约束。最后特别提醒,delegate也是一种类型,别忘了泛型委托。
二、泛型方法(Generic Method)
概述:
泛型方法即在方法声明中包含类型参数。其实属泛型的内容。但泛型方法可以用在一般类中。
语法点:
重载(overload)的时候注意,约束不成为方法签名的一部分。而重写(override),约束是会被默认继承的。
三、匿名方法(Anonymous Method)
概述:可以直接将代码赋给委托。在进行委托实例化时可以省略掉委托类型。代码示例如下:
myButton.Click += delegate {//代码}
myButton.Click += myClick;
感觉就是一种语法的简化。从代码的可维护性来说还是不用为好。但又确实能使一些代码简洁一点。看团队的决定吧。
语法点:
要注意外部变量的生存周期会一直延长到委托实例引用结束。尽量避免使用。
四、迭代器(Iterator)
概述:
严格来说只是简化迭代器的构造罢了。或者说简化了创建可以用于foreach的枚举集合的工作。通过引入关键字yield来实现。再不用太多的关心IEnumerator了。直接在类中实现GetEnumerator()然后在for循环中用yield return就可以了。
语法点:
可以用yield break来停止迭代。
五、局部类(Partial Class)
概述:
就是允许通过关键字partial将一个类写在多个cs文件中。最大的用处可能就是将IDE自动生成的代码分开吧。大家都留意到VS05中的自动生成的代码都到designer.cs中去了吧。
语法点:
在不同部分定义中,Attribute和Interface是累加的。当然要保证基类的唯一。而abstract和sealed是部分使用,整个类生效。语义类型访问修饰符要保持一致。
六、可空类型(Nullable Type)
概述:
其实是一个泛型类型。System.Nullable<T>,T必须为值类型。并且通过“?”来作一个语法的简化。用一句代码说明就是:
int? x = null;
引入NullableType获得的启示是,.Net的ORMapping可以做得更好了。
语法点:
使用HasValue属性判断是否为null。
七、静态类(Static Class)
概述:
可以声明一个static class。该class不能被继承不能被实例化,只能包含静态成员。相当于sealed abstract。用途可以用作全局函数。另外Singleton模式的实现更方便了。
语法点:
不能有constructor,不能有实例成员,不能再使用sealed abstract修饰。不能继承其他类和实现任何interface。成员不能使用protected修饰符。
八、属性访器访问修饰符
概述:
可以额外对get、set中的其中一个属性访问其使用一个访问修饰符。用途可以说是更灵活的封装吧。
语法点:
只能在get、set的一个中使用。接口中的属性访问器不能同样不能带有访问修饰符。索引器可以使用。
九、命名空间别名限定符
概述:可以使用双冒号“::”使用一个命名空间的别名。如
using sc=System.Collection;
那么使用的时候就可以写成sc::ArrayList()了。
作用是更方便的调用不同命名空间下的同名类性。