• 泛型

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

【C#版本详情回顾】C#2.0主要功能列表的更多相关文章

  1. 【C#版本详情回顾】C#4.0主要功能列表

    诊断和性能 从 .NET Framework 4 开始,您可以获得每个应用程序域的处理器使用情况和内存使用情况估计值 通过托管承载 API.本机承载 API 以及 Windows 事件跟踪 (ETW) ...

  2. 【C#版本详情回顾】C#3.0主要功能列表

    隐式类型的本地变量和数组 在与本地变量一起使用时,var 关键字指示编译器根据初始化语句右侧的表达式推断变量或数组元素的类型 对象初始值设定项 支持无需显式调用构造函数即可进行对象初始化 集合初始值设 ...

  3. 【转帖】sysbench使用教程(包含ubuntu自带的0.4版本、0.5版本和最新的1.0版本)

    sysbench使用教程(包含ubuntu自带的0.4版本.0.5版本和最新的1.0版本) 2018年08月10日 09:54:42 cxin917 阅读数 429   版权声明:本文为博主原创文章, ...

  4. [.net 面向对象程序设计深入](4)MVC 6 —— 谈谈MVC的版本变迁及新版本6.0发展方向

    [.net 面向对象程序设计深入](4)MVC 6 ——谈谈MVC的版本变迁及新版本6.0发展方向 1.关于MVC 在本篇中不再详细介绍MVC的基础概念,这些东西百度要比我写的全面多了,MVC从1.0 ...

  5. PyQt 5.2 发布,此版本完全支持Qtv5.2.0

    PyQt 5.2 发布,此版本完全支持Qtv5.2.0 :包括了新的 QtBluetooth,QtPositioning,QtMacExtras,QtWinExtras 和 Qt11Extras 模板 ...

  6. virtualbox谨记:win7上只有4.3.x的版本支持ubuntu14.04.3虚拟机安装Oracle Rac,其他的版本3.x和5.0.2(至2015-08-30)均不可以

    virtualbox谨记:win7上只有4.3.x的版本支持ubuntu14.04.3虚拟机安装Oracle Rac,其他的版本3.x和5.0.2(至2015-08-30)均不可以

  7. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  8. C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) C#各版本新特性 C#版本和.NET版本以及VS版本的对应关系

    C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) 2017年08月06日 11:53:13 阅读数:6705 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有1 ...

  9. Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR tensorflow-1.13.1和1.14windows版本目前不支持CUDA10.0

    报错出现 Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR tensorflow-1.13.1和1.14windows版本目前不支持 ...

随机推荐

  1. Linux的selinux

    SELinux 操作模式     学科 (Subject):SELinux 序,因此你能够将『主体』跟 process 划上等号:     目标 (Object): 主体程序是否能存取的『目标资源』一 ...

  2. paip.将数据导入到在英语语音数据库mysql道路解决空原则问题

    paip.将数据导入到在英语语音数据库mysql道路解决空原则问题 #---原因:mysql 导入工具bug #---解决:不要使用双引号括注音. 笔者 老哇爪 Attilax 艾龙.  EMAIL: ...

  3. Linux 编程学习笔记----动笔makefile档

    Befroe Beginning. 在设置暑假的plan ,关于Linux的书籍如今在看的是ALP和Linux高级程序设计(杨宗德)第三版.在计划中的是Linux高级环境编程. 如今開始关于Linux ...

  4. (大数据工程师学习路径)第一步 Linux 基础入门----数据流重定向

    介绍 开始对重定向这个概念感到些许陌生,但通过前面的课程中多次见过>或>>操作了,并知道他们分别是将标准输出导向一个文件或追加到一个文件中.这其实就是重定向,将原本输出到标准输出的数 ...

  5. 由于抽签HT For Web ComboBox下拉框组件

    传统HTML5的下拉框select仅仅能实现简单的文字下拉列表,而HT for Web通用组件中ComboBox不仅可以实现传统HTML5下拉框效果,并且可以在文本框和下拉列表中加入自己定义的小图标, ...

  6. .net程序调用检测和性能分析工具——DotTrace

    DotTrace可以对.net程序进行性能监测,对正在运行的程序和网站监控,主要界面如下: 需要将该工具安装在程序运行的服务器上. 主要用到这个视图,显示了每个方法的时间,下面是反编译出来的代码. P ...

  7. iOS学习笔记---简单的学习总结

    1.xcode6.0官方的版本必须是OS X10.9.4而以上的版本安装前: 2,xcode6.0正式版创建命令行项目时,无法选择swift语言:可是创建iOS应用项目时能够选择swift语言. 3, ...

  8. dapper的Dapper-Extensions用法(一)

    dapper的Dapper-Extensions用法(一) Dapper-Extensions Dapper Extensions is a small library that complement ...

  9. JS日期时间选择器

    本文介绍一种日期和时间选择器的使用方法.此选择器由jqueryUI实现,支持精确到毫秒的时间选择. 此选择器项目地址为http://trentrichardson.com/examples/timep ...

  10. .Net中把图片等文件放入DLL中,并在程序中引用

    原文:.Net中把图片等文件放入DLL中,并在程序中引用 [摘要] 有时我们需要隐藏程序中的一些资源,比如游戏,过关后才能看到图片,那么图片就必须隐藏起来,否则不用玩这个游戏就可以看到你的图片了,呵呵 ...