63

C# 语言历史版本特性(C# 1.0到C# 8.0汇总) - Mzhangyl

 5 years ago
source link: https://www.cnblogs.com/microsoft-zyl/p/9093748.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

C# 语言历史版本特性(C# 1.0到C# 8.0汇总)

C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持。微软将C#提交给标准组织ECMA,C# 5.0目前是ECMA发布的最新规范,C# 6.0还是草案阶段,C# 7.1是微软当前提供的最新规范。

这里仅仅列个提纲,由于C# 5.0是具有ECMA标准规范的版本,所以选择C# 5.0作为主要版本学习,并专题学习C# 6.0,7.0版本新特性。

C#语言规范GitHub库参见:https://github.com/dotnet/csharplang

C#语言路线图及开发中的特性参见: 
https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md

语言版本发布时间.NET Framework要求Visual Studio版本
C# 1.0 2002.1 .NET Framework 1.0 Visual Studio .NET 2002
C# 1.1\1.2 2003.4 .NET Framework 1.1 Visual Studio .NET 2003
C# 2.0 2005.11 .NET Framework 2.0 Visual Studio 2005
C# 3.0 2007.11 .NET Framework 2.0\3.0\3.5 Visual Studio 2008
C# 4.0 2010.4 .NET Framework 4.0 Visual Studio 2010
C# 5.0 2012.8 .NET Framework 4.5 Visual Studio 2012\2013
C# 6.0 2015.7 .NET Framework 4.6 Visual Studio 2015
C# 7.0 2017.3 .NET Framework 4.6.2 Visual Studio 2017
C# 7.1 2017.6 .NET Framework Visual Studio 2017 v15.3预览版
C# 8.0 待发布  .NET Framework 4.7.1  Visual Studio 2017 v15.7

C# 1.0 特性

第1个版本,编程语言最基础的特性。

  • Classes:面向对象特性,支持类类型
  • Structs:结构
  • Interfaces:接口
  • Events:事件
  • Properties:属性,类的成员,提供访问字段的灵活方法
  • Delegates:委托,一种引用类型,表示对具有特定参数列表和返回类型的方法的引用
  • Expressions,Statements,Operators:表达式、语句、操作符
  • Attributes:特性,为程序代码添加元数据或声明性信息,运行时,通过反射可以访问特性信息
  • Literals:字面值(或理解为常量值),区别常量,常量是和变量相对的

C# 2特性 (VS 2005)

  • Generics:泛型
  • Partial types:分部类型,可以将类、结构、接口等类型定义拆分到多个文件中
  • Anonymous methods:匿名方法
  • Iterators:迭代器
  • Nullable types:可以为Null的类型,该类可以是其它值或者null
  • Getter/setter separate accessibility:属性访问控制
  • Method group conversions (delegates):方法组转换,可以将声明委托代表一组方法,隐式调用
  • Co- and Contra-variance for delegates and interfaces:委托、接口的协变和逆变
  • Static classes:静态类
  • Delegate inference:委托推断,允许将方法名直接赋给委托变量

C# 3特性 (VS 2008)

  • Implicitly typed local variables:
  • Object and collection initializers:对象和集合初始化器
  • Auto-Implemented properties:自动属性,自动生成属性方法,声明更简洁
  • Anonymous types:匿名类型
  • Extension methods:扩展方法
  • Query expressions:查询表达式
  • Lambda expression:Lambda表达式
  • Expression trees:表达式树,以树形数据结构表示代码,是一种新数据类型
  • Partial methods:部分方法

C# 4特性 (VS 2010)

  • Dynamic binding:动态绑定
  • Named and optional arguments:命名参数和可选参数
  • Generic co- and contravariance:泛型的协变和逆变
  • Embedded interop types (“NoPIA”):开启嵌入类型信息,增加引用COM组件程序的中立性

C# 5特性 (VS 2012)

  • Asynchronous methods:异步方法
  • Caller info attributes:调用方信息特性,调用时访问调用者的信息

C# 6特征 (VS 2015)

  • Compiler-as-a-service (Roslyn)
  • Import of static type members into namespace:支持仅导入类中的静态成员
  • Exception filters:异常过滤器
  • Await in catch/finally blocks:支持在catch/finally语句块使用await语句
  • Auto property initializers:自动属性初始化
  • Default values for getter-only properties:设置只读属性的默认值
  • Expression-bodied members:支持以表达式为主体的成员方法和只读属性
  • Null propagator (null-conditional operator, succinct null checking):Null条件操作符
  • String interpolation:字符串插值,产生特定格式字符串的新方法
  • nameof operator:nameof操作符,返回方法、属性、变量的名称
  • Dictionary initializer:字典初始化

C# 7 特征 (Visual Studio 2017)

  • Out variables:out变量直接声明,例如可以out in parameter
  • Pattern matching:模式匹配,根据对象类型或者其它属性实现方法派发
  • Tuples:元组
  • Deconstruction:元组解析
  • Discards:没有命名的变量,只是占位,后面代码不需要使用其值
  • Local Functions:局部函数
  • Binary Literals:二进制字面量
  • Digit Separators:数字分隔符
  • Ref returns and locals:引用返回值和局部变量
  • Generalized async return types:async中使用泛型返回类型
  • More expression-bodied members:允许构造器、解析器、属性可以使用表达式作为body
  • Throw expressions:Throw可以在表达式中使用

C# 7.1 特征 (Visual Studio 2017 version 15.3)

  • Async main:在main方法用async方式
  • Default expressions:引入新的字面值default
  • Reference assemblies:
  • Inferred tuple element names:
  • Pattern-matching with generics:

C# 8.0 特征 (Visual Studio 2017 version 15.7) 

  • Default Interface Methods 缺省接口实现
  • Nullable reference type NullableReferenceTypes  非空和可控的数据类型
  • Recursive patterns 递归模式
  • Async streams  异步数据流
  • Caller expression attribute 调用方法表达式属性
  • Target-typed new
  • Generic attributes 通用属性
  • Ranges
  • Default in deconstruction
  • Relax ordering of ref and partial modifiers

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK