序言
自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Framework库的相应支持,也不断的带给我们期待与惊喜。下面我们就对c#一路走到现在,做一个回顾与学习。
C#语言目标与前行
c#的设计目标是有以下几点:
- 旨在是一种简单,现代,通用的面向对象编程语言。
- 语言及其实现应该为软件工程原理提供支持,例如强类型检查,数组维度检查,未初始化的变量引用检测以及自动垃圾收集。软件的鲁棒性,耐久性和程序员的生产力很重要。
- 旨在用于开发适用于分布式环境中部署的软件组件。
- 便携性对于源代码和程序员非常重要,特别是已经熟悉C和C ++的程序员。
- 支持国际化是非常重要的。
- C#适用于为托管和嵌入式系统编写应用程序,从使用复杂的操作系统到非常小的专用功能都非常适用。
- 虽然C#应用程序在内存和处理能力要求方面是经济的,但是该语言并不打算直接用C或汇编语言直接与性能和尺寸进行竞争。
c#版本
c#版本中添加的功能:
C#2.0
- 泛型
- 部分类型
- 匿名方法
- 迭代器
- 可空类型
- Getter / setter单独可访问性
- 方法组转换(代表)
- Co- and Contra-variance for delegates
- 静态类
- Delegate inference
C#3.0
- 隐式类型局部变量
- 对象和收集初始化器
- 自动实现的属性
- 匿名类型
- 扩展方法
- 查询表达式
- Lambda表达式
- 表达树
- 部分方法
C#4.0
- 动态绑定
- 命名和可选参数
- Generic co- and contravariance
- 嵌入式互操作类型(“NoPIA”)
C#5.0
- 异步方法
- Caller info attributes
C#6.0
- Compiler-as-a-service(Roslyn)
- 将静态类型成员导入命名空间
- 异常过滤器
- 在Catch和Finally中使用Await
- 自动属性初始化器
- 只读属性的默认值
- Expression-bodied members
- Null-conditional operators(空条件运算符,简洁检查)
- 字符串插值
- nameof operator
- 字典初始化器
C#7.0
- out变量
- 模式匹配
- 元组
- 解构
- 局部函数
- 数字分隔符
- 二进制文字
- 局部引用和引用返回
- 扩展异步返回类型
- 表达式的构造函数和finalizers
- Expression bodied getters and setters
- throw表达式
C#7.1
- Async main
- 默认表达式
参考文档:https://en.wikipedia.org/wiki/C_Sharp_(programming_language)#cite_note-roslyn_6-47
c#7.0新特性详解
在2016年Visual Studio “15” Preview 4发布,c# 7.0便开始浮现,现在vs2017已经发布,c#7.0带给我们的惊喜,我们也该一探究竟啦。
C#7.0增加许多新功能,重点是数据,代码简化和性能上。
Out variables
目前在C#中,使用out参数不像我们想要的那么流畅。在使用out参数调用一个方法之前,首先必须声明变量来传递给它。您也不能使用var
它们来声明它们,但需要指定完整的类型。
在c#7中再来看看
模式匹配
c#7中
以前版本需要转化
Switch statements with patterns 扩展switch语句使用模式匹配
元组(Tuples)
注意:元组依赖于一组基础类型,不包括在预览4中。要使功能正常工作,您可以通过NuGet轻松获取它们:
- 右键单击解决方案资源管理器中的项目,然后选择“管理NuGet软件包...”
- 选择“浏览”选项卡,选中“包含预发行”,然后选择“nuget.org”作为“包源”
- 搜索“System.ValueTuple”并安装它。
局部函数
简单的说,就是在方法里面写方法然后自己调用。
注意:在预览4中,本地函数必须在调用之前声明。这个限制将被松开,所以一旦他们读取的局部变量被明确地分配,就可以调用这个限制。
Literal improvements
C#7.0允许在数字文字中_
作为数字分隔符出现:
var d = 123_456; var x = 0xAB_CD_EF;
你可以把它们放在数字之间,以提高可读性。它们对价值没有影响。
另外,C#7.0引入了二进制文字,因此您可以直接指定位模式,而不必以心脏知道十六进制符号。
更多c#7.0的特性
到此,我就不在一个个的上演c#7.0的其他功能啦。如果你想深入其他,仔细阅读下面的文档:
请参考文档:https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/
c#6.0新语言功能详解
以下新功能在VS 2015及17中实现并可用。
ADD:新增,Exists:已存在,N/A:对该语言没有意义,No:不适用此版本。
下面我简述几个新功能,剩下的我会把文档连接拿出来自己观摩。
字符串插值
上面的代码中都有体现。
字典索引初始化
自动属性初始化
using引用静态类
更多c#6.0语言新特性
线上代码可执行演示文档连接:http://www.volatileread.com/Wiki/Index?id=1075 效果如下
参考文档:https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6
c#2.0-5.0参考文档
c#5.0参考文档
c#4.0参考文档
连接地址:https://msdn.microsoft.com/en-us/magazine/ff796223.aspx
c#3.0参考文档
连接地址:https://msdn.microsoft.com/en-us/library/bb308966.aspx
c#2.0参考文档
连接地址:https://msdn.microsoft.com/en-us/library/7cz8t42e(v=vs.80).aspx
总结
接下来是大家最喜欢的总结内容啦,内容有二,如下:
1、希望能关注我其他的文章。