C#语言的新特性及相关知识
.NET各个版本之间的关系
版本及开发工具和语言
2002年 2003年 2005年 2006年 2008年
开发工具 Visual Visual Studio.Net Visual Studio Visual Studio Visual Studio
Studio.Net 2003 2005 2005+扩展 2008
2002
语言 C#1.0 C#1.1 C#2.0 没有变化 C#3.0 C#5.0 C#6.0
VB.NET(V7.0) VB.NET(V7.1) VB.NET(V8.0) VB.NET(V9.0) VB.NET(V7.0) VS2013
CLR CLR V1.0 CLR V1.1 CLR V2.0 CLR V2.0 CLR V2.0 CLR4.5 CLR 4.5.1
C#语言新特性
(1)自动属性和属性访问器的保护级别
例如:prublic int ID{get;set;}
(2)可空类型:允许值类型变量为空.
语法:Nullable<T>,也可以写成T?,T必须是值类型.
system.Nullable<T>中的结构体成员
构造函数:Nullable<T>:初始化Nullable<T>结构体并为其指定值.
方法:Equals:比较跟传入的对象是否相等
GetHashCode:返回当前对象值的Hash码.
GetType:获取当前实例的类型
GetValueOrDefault:获取对象的值或默认值.
ToString:以文本字符串的形式返回当前对象的值.
运算符:Explicit:返回Nullable<T>的值.
Implicit:创建Nullable<T>对象,然后给其赋值.
属性:HasValue:当前对象是否有值.
Value:当前对象的值.
(3)泛型:泛型的使用可以提高代码的重用率,保护类型安全和提高性能.
优点:执行速度快,不需要装箱和拆箱,安全(线程安全)
(4)对象和集合初始化器:
对象初始化器:由一些成员初始化器组成,包含在花括号中间,用逗号分隔.每个成员初始化器以对象的一个可访问的字段或属性的名字开始的.
后面跟一个等号,之后是一个表达式,或一个对象,或一个集合初始化器.
集合初始化器:集合初始化器由一系列包括在花括号之间的元素初始化器构成,元素初始化器之间使用逗号进行分隔,元素初始化器不能是赋值表达式.
(5)匿名类型:匿名类型一般出现在LINQ的select字句中,用来投影筛选出的数据.匿名类型创建的属性是只读的,不允许包含除了属性以外的成员,不能强制转换为object以外的类型或接口.
(6)扩展方法:必须是静态类的静态方法(是一种建立在非泛型,非嵌套的静态类中的特殊方法).是针对Landba而来的.
特点:1.在某些情况下,父类不允许继承,通过扩展方法来实现非继承方法的添加.
2.在继承关系中,我们通常继承一个对象(包括对象中扩展方法)之后对子类进行扩展写法.
3.父类指向子类称为逆变,子类指向父类称为协变.
4.扩展方法的名称如果和类型的成员方法重名,扩展方法永远不会被调用,扩展方法无法修改类型内部的源代码,所以在类型升级后,扩展方法可能会失效.
(7)匿名方法和Lamdba表达式:匿名方法就是方法中的方法,Lamdba表达式将匿名方法的语法进一步简化.
Lamdba表达式的语法:(input parameters)=>expression
注释:()中表示输入参数,expression表示表达式,运算符"=>"读为goes to.