c#3.0的新增语言功能
 
c#3.0的新增语言功能
一.隐式类型局部变量
1、var在foreach中的应用
隐式类型变量的限制:
(1)不能用var来定义返回值、参数的类型和类型的数据成员
(2)其次,使用var进行声明的局部变量必须在声明时进行赋值,并且不能以null作为初始值。(想想为什么?)
2、隐式类型局部数组
隐式类型的局部变量不会默认设置为System.Object.
隐式类型的数据是强类型的数据
3、隐式类型局部变量的作用(主要用于LINQ查询返回的数据)
小结:如果使用var来声明局部变量只是为了简单,就太不值得了。(而且有可能使人疑惑)
其实,我们可以认为只有在定义从LINQ查询返回的数据的时候才应该用var关键字
二、自动属性
我们知道.NET编程语言更推荐使用类型属性来安全获取类型的私有字段并赋值。
我们不能构建只读和只写的属性。
1、和自动属×××互
2、限制自动属性的访问
3、有关自动属性和默认值
隐藏的支持字段会被设置一个可直接使用的安全的默认值
小结:如果我们构建的属性除了获取和设置基础私有字段之外还需要其他代码(比如数据验证逻辑,写事件日志、和数据库通信等),我们就需要手工定义“普通的”.NET属性。c#3.0自动属性永远只会提供底层数据类型的简单封装。
三、扩展方法
1扩展方法的定义
(1)必须把方法定义在静态类中,每一个扩展方法也必须是静态的
(2) 所有的扩展方法都需要使用关键字this对第一个参数,并且只对第一个参数进行修饰。
(3)每一个扩展方法只可以被内存中正确的实例调用,或者通过其所处的静态类调用。
2、静态调用扩展方法
通过一个对象调用它的扩展方法(这样看起来其实是实例层次上的方法)只是编译器的假象。因此可以像调用普通静态方法那样调用扩展方法。
3、扩展方法的作用域
扩展方法和普通方法不一样,它不能直接访问它扩展的类型的成员。(从另外一个角度讲,扩展不是继承)
4、通过扩展方法来扩展接口类型
当我们扩展一个接口类型使其具有新成员时必须提供这些成员的实现。
四 分部方法
分部方法只可以定义在分部类中
分部方法必须返回void
分部方法可以是静态的或实例级的
分部方法可以有参数(包含被this、ref或params修饰的参数,但不能具有out修饰符)
分部方法总是隐式私有的
分部方法可能会被放在已编译的程序集中,但也可能不会
小结:分部方法最明显的限制就是它必须是隐式私有的并且总是返回void,一般程序中很少用到这个新语言特性。
五 对象初始化器
使用这种语法,只需要小量代码就可以完成创建一个新的对象变量和为对象的一系列属性和公共数据成员进行赋值。
六 匿名类型
匿名类型本身有很多限制
你并没有控制匿名类型的名称
匿名类型继承System.Object
匿名类型不支持事件、自定义方法、自定义运算符和自定义重写
匿名类型是隐式封闭的
匿名类型的实例的创建只使用默认构造函数
但是在使用LINQ时,我们可能需要快速构建一个实体,而不需要定义其功能,这时你会发现匿名类型的好处。
更详细的内容请参看相关资料!