- 泛型
- 优点:类型安全/重用代码/提升性能
- 应用:泛型接口、泛型类、泛型类型参数、泛型方法、泛型事件和泛型委托
- 命名空间:System.Collections.Generic
- 特性:泛型约束,default关键字获取类型默认值 default(T)
- 反射:支持反射获取泛型类型信息
- 迭代器
- 优点:更简洁的语义实现迭代器
- 语法:yield return语句依次返回每个元素,yield break将终止迭代
- 分部类(分部接口、分部结构 关键字partial)
- 作为同一类型的各个部分的所有分部类型定义都必须使用 partial 进行修饰
-
partial 修饰符只能出现在紧靠关键字 class、struct 或 interface 前面的位置
- 分部类型定义中允许使用嵌套的分部类型
- 要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集和同一模块中进行定义
- 类名和泛型类型参数在所有的分部类型定义中都必须匹配,泛型类型可以是分部的
- 分部类的各个部分必须具有相同的可访问性,如 public、private 等
- 分部类同样支持支持分部结构和分部接口
- 可空类型
- 可空类型表示可被赋值为 null 值的值类型变量,无法创建基于引用类型的可空类型
- 语法 T? 是 System.Nullable<T> 的简写,此处的 T 为值类型
- 为可空类型赋值与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108
- 如果基础类型的值为 null,请使用 System.Nullable.GetValueOrDefault 属性返回该基础类型所赋的值或默认值
- 请使用 HasValue 和 Value 只读属性测试是否为空和检索值
- 如果已赋值,则 Value 属性返回该值,否则将引发 System.InvalidOperationException
- 支持 ?? 运算符分配默认值。。。
- 不允许使用嵌套的可空类型,将不编译下面一行:Nullable<Nullable<int>> n
- 基于可空类型的对象只在该对象为非空时装箱。如果 HasValue 为 false,则不装箱,而是将对象引用直接赋值为 null
- 如果对象非空,也就是说,如果 HasValue 为 true,则会发生装箱过程,但只将可空对象所基于的基础类型装箱
- 可空类型支持一元运算和二元运算,以及与非可空类型的转换和转型
- 相等运算,如果两个操作数都是null,两者相等
- 关系运算,操作数任何一个是null,结果就是返回false
- 可空类型在CLR中的一些特殊待遇
- 值类型上定义的重载操作符,在其可空版本上,支持自动调用
- 已装箱值类型拆箱为可空类型,如果引用为null,那么拆箱后的Nullable<T>值也为null,拆箱为非可空版本则会抛出异常
- 可空类型进行GetType(),编译器会进行伪装,返回非可空的实际类型
- 支持直接将可空类型转型为非可空版本的接口类型
- 匿名方法
- 使用匿名方法,则不必创建单独的方法,因此减少了实例化委托所需的编码系统开销
- 如果局部变量和参数的范围包含匿名方法声明,则该局部变量和参数称为该匿名方法的外部变量或捕获变量
- 与局部变量不同,外部变量的生命周期一直持续到引用该匿名方法的委托符合垃圾回收的条件为止
- 匿名方法不能访问外部范围的 ref 或 out 参数
- 命名空间别名限定符
- 静态类
- 它们仅包含静态成员
- 它们不能被实例化
- 它们是密封的
- 它们不能包含实例构造函数
- 创建静态类与创建仅包含静态成员和私有构造函数的类大致一样
- 可声明静态构造函数以分配初始值或设置某个静态状态
- 静态成员在第一次被访问之前并且在任何静态构造函数(如调用的话)之前初始化
- 静态构造函数
- 静态构造函数既没有访问修饰符,也没有参数
- 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类
- 无法直接调用静态构造函数
- 在程序中,用户无法控制何时执行静态构造函数
- 静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项
- 静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法
-
外部程序集别名(extern)
- 属性访问器可访问性
- 委托中的协变和逆变
- 传递给委托的方法在返回类型和参数方面可以具有更大的灵活性
- 固定大小的缓冲区
- 在不安全的代码块中,现在可以声明包含嵌入数组的固定大小结构
- 友元程序集
- 内联警告控制
-
#pragma 警告指令可用于禁用和启用某些编译器警告
- #pragma warning disable warning-list
- #pragma warning restore warning-list
- volatile
- 现在可以将 volatile 关键字应用于 IntPtr 和 UIntPtr
-
volatile 关键字表示字段可能被多个并发执行线程修改
- 声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制
- 确保该字段在任何时间呈现的都是最新的值
-
volatile 修饰符通常用于由多个线程访问而不使用 lock 语句(C# 参考) 语句对访问进行序列化的字段
- 应用字段类型包括:引用类型、指针类型、整型、枚举类型
- 关键字仅可应用于类或结构字段。不能将局部变量声明为 volatile