一、.NET Framework、C#、Visual Studio版本
C#版本 | .NET Framework版本 | Visual Studio版本 | 发布时间 |
C# 1.0 | .NET Framework 1.0 | Visual Studio .NET 2002 | 2002.1 |
C# 1.1 C# 1.2 | .NET Framework 1.1 | Visual Studio .NET 2003 | 2003.4 |
C# 2.0 | .NET Framework 2.0 | Visual Studio 2005 | 2005.11 |
C# 3.0 | .NET Framework 2.0 .NET Framework 3.0 .NEF Framework 3.5 | Visual Studio 2008 Visual Studio 2010 | 2007.11 |
C# 4.0 | .NET Framework 4.0 | Visual Studio 2010 | 2010.4 |
C# 5.0 | .NET Framework 4.5 | Visual Studio 2012 Visual Studio 2013 | 2012.8 |
C# 6.0 | .NET Framework 4.6 | Visual Studio 2015 | 2015.7 |
C# 7.0 | .NET Framework 4.6.2 | Visual Studio 2017 | 2017.3 |
C# 7.1 | .NET Framework 4.7 | Visual Studio 2002 | 2017.8 |
C# 7.2 | .NET Framework 4.7.1 | Visual Studio 2002 | 2017.11 |
C# 7.3 | .NET Framework 4.7.2 | Visual Studio 2002 | 2018.5 |
| | | |
二、查看计算机上安装的.NET Framework版本
方法一:在开始目录找到Visual Studio Tool,使用VS 开发人员命令提示符(命令窗口),使用 Clrver 工具查找当前运行时版本,输入命令clrver。
方法二:在计算机资源管理器的地址栏中,输入路径:%systemroot%\Microsoft.NET\Framework。这里就是进入了.NET Framewok的版本信息目录,可以看下本计算机安装的是那个版本的.NET Framework。
三、C#版本发展与语言特性
C# 1.0 特性 [C#第一个版本,提供所有必须的基础语法特性] | |
Classes | 面向对象特性,支持类类型 |
Structs | 结构 |
Interfaces | 接口 |
Events | 事件 |
Properties | 属性,类的成员,提供访问字段的灵活方法 |
Delegates | 委托,一种引用类型,表示对具有特定参数列表和返回类型的方法的引用 |
Expressions | 表达式 |
Statements | 语句 |
Operators | 操作符 |
Attributes | 特性,为程序代码添加元数据或声明性信息,运行时,通过反射可以访问特性信息 |
Literals | 字面值(或理解为常量值),区别常量,常量是和变量相对的 |
C#2.0特性【C#2.0中最重要的就是引进了泛型的概念】 | |
Generics | 泛型 |
Partial types | 分部类型,可以将类、结构、接口等类型定义拆分到多个文件中 |
Anonymous methods | 匿名方法 |
Iterators | 迭代器 |
Nullable types | 可以为Null的类型,该类可以是其它值或者null |
Getter/setter separate accessibility | 属性访问控制 |
Static classes | 静态类 |
Co- and Contra-variance for delegates and interfaces | 委托、接口的协变和逆变 |
Delegate inference | 委托推断,允许将方法名直接赋给委托变量 |
Method group conversions (delegates) | 方法组转换,可以将声明委托代表一组方法,隐式调用 |
C#3.0【该版本中较大的改进是增加了隐式局部变量和扩展方法】 | |
Anonymous types | 匿名类型 |
Extension methods | 扩展方法 |
Query expressions | 查询表达式 |
Lambda expression | Lambda表达式 |
Expression trees | 表达式树,以树形数据结构表示代码,是一种新数据类型 |
Partial methods | 部分方法 |
Auto-Implemented properties | 自动属性,自动生成属性方法,声明更简洁 |
Object and collection initializers | 对象和集合初始化器 |
Implicitly typed local variables | 隐式局部变量 |
C#4.0 | |
Dynamic binding | 动态绑定 |
Named and optional arguments | 命名参数和可选参数 |
Generic co- and contravariance | 泛型的协变和逆变 |
C#5.0 | |
Asynchronous methods | 异步编程 |
Caller info attributes | 调用方信息特性,调用时访问调用者的信息 |
C#6.0 | |
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 | 字典初始化 |
Await in catch/finally blocks | 支持在catch/finally语句块使用await语句 |
Import of static type members into namespace | 支持仅导入类中的静态成员 |
C#7.0 | |
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可以在表达式中使用 |
Out variables | out变量直接声明,例如可以out in parameter |
Pattern matching | 模式匹配,根据对象类型或者其它属性实现方法派发 |