自从2000年初期发布以来,c#编程语言不断的获得改进,使咱们可以更加清晰的编写代码,也更加容易维护咱们的代码,加强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Framework库的相应支持,也不断的带给咱们期待与惊喜。下面咱们就对c#一路走到如今,作一个回顾与学习。git
c#的设计目标是有如下几点:程序员
旨在是一种简单,现代,通用的面向对象编程语言。github
语言及其实现应该为软件工程原理提供支持,例如强类型检查,数组维度检查,未初始化的变量引用检测以及自动垃圾收集。软件的鲁棒性,耐久性和程序员的生产力很重要。编程
旨在用于开发适用于分布式环境中部署的软件组件。c#
便携性对于源代码和程序员很是重要,特别是已经熟悉C和C ++的程序员。数组
支持国际化是很是重要的。异步
C#适用于为托管和嵌入式系统编写应用程序,从使用复杂的操做系统到很是小的专用功能都很是适用。编程语言
虽然C#应用程序在内存和处理能力要求方面是经济的,可是该语言并不打算直接用C或汇编语言直接与性能和尺寸进行竞争。分布式
c#版本函数
c#版本中添加的功能:
泛型
部分类型
匿名方法
迭代器
可空类型
Getter / setter单独可访问性
方法组转换(表明)
Co- and Contra-variance for delegates
静态类
Delegate inference
隐式类型局部变量
对象和收集初始化器
自动实现的属性
匿名类型
扩展方法
查询表达式
Lambda表达式
表达树
部分方法
动态绑定
命名和可选参数
Generic co- and contravariance
嵌入式互操做类型(“NoPIA”)
异步方法
Caller info attributes
Compiler-as-a-service(Roslyn)
将静态类型成员导入命名空间
异常过滤器
在Catch和Finally中使用Await
自动属性初始化器
只读属性的默认值
Expression-bodied members
Null-conditional operators(空条件运算符,简洁检查)
字符串插值
字典初始化器
out变量
模式匹配
元组
解构
局部函数
数字分隔符
二进制文字
局部引用和引用返回
扩展异步返回类型
表达式的构造函数和finalizers
throw表达式
默认表达式
参考文档:https://en.wikipedia.org/wiki/C_Sharp_(programming_language)#cite_note-roslyn_6-47
在2016年Visual Studio “15” Preview 4发布,c# 7.0便开始浮现,如今vs2017已经发布,c#7.0带给咱们的惊喜,咱们也该一探究竟啦。
C#7.0增长许多新功能,重点是数据,代码简化和性能上。
目前在C#中,使用out参数不像咱们想要的那么流畅。在使用out参数调用一个方法以前,首先必须声明变量来传递给它。您也不能使用var
它们来声明它们,但须要指定完整的类型。
public void PrintCoordinates(Point p) { int x, y; //必须声明 p.GetCoordinates(out x, out y); WriteLine($"({x}, {y})"); }
在c#7中再来看看
public void PrintCoordinates(Point p) { p.GetCoordinates(out int x, out int y); WriteLine($"({x}, {y})"); }
c#7中
public static void PrintStars(object o) { if (o is int i) Console.WriteLine(i + 12); }
之前版本须要转化
public static void PrintStars(object o) { if (o is int) Console.WriteLine(Convert.ToInt32(o) + 12); }
public static void PrintStars(object o) { switch (o) { case Print p: break; case int a: break; case String b when b=="123": break; } } } public class Print { public string PrintName { get; set; } public string MoBanPath { get; set; } public int Count { get; set; } }
注意:元组依赖于一组基础类型,不包括在预览4中。要使功能正常工做,您能够经过NuGet轻松获取它们:
右键单击解决方案资源管理器中的项目,而后选择“管理NuGet软件包...”
选择“浏览”选项卡,选中“包含预发行”,而后选择“nuget.org”做为“包源”
搜索“System.ValueTuple”并安装它。
static void Main(string[] args) { var tuple = (a: 10, b: "123"); Console.WriteLine($"a:{tuple.a},b:{tuple.b}"); var result1 = GetS(); var result = Get(); Console.WriteLine($"Item1:{result1.Item1},Item2:{result1.Item2},Item3:{result1.Item3}"); Console.WriteLine($"a:{result.a},b:{result.b},c:{result.c}"); Console.ReadLine(); } static (string, int, DateTime) GetS() { return ("abc", 123, DateTime.Now); } static (string a, int b, DateTime c) Get() { return (a: "abc", b: 123, c: DateTime.Now); }
简单的说,就是在方法里面写方法而后本身调用。
注意:在预览4中,本地函数必须在调用以前声明。这个限制将被松开,因此一旦他们读取的局部变量被明确地分配,就能够调用这个限制。
static void Main(string[] args) { Console.WriteLine($"{Get(123)},{Get("abc")},{Get(null)}"); Console.ReadLine(); } public static string Get(object a) { return GetP(); string GetP() { if (a is int v) return v + ""; if (a is string b) return b; return "ccc"; } }
C#7.0容许在数字文字中_
做为数字分隔符出现:
var d = 123_456; var x = 0xAB_CD_EF;
你能够把它们放在数字之间,以提升可读性。它们对价值没有影响。
另外,C#7.0引入了二进制文字,所以您能够直接指定位模式,而没必要以心脏知道十六进制符号。
var b = 0b1010_1011_1100_1101_1110_1111;
到此,我就不在一个个的上演c#7.0的其余功能啦。若是你想深刻其余,仔细阅读下面的文档:
请参考文档:https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/
如下新功能在VS 2015及17中实现并可用。
ADD:新增,Exists:已存在,N/A:对该语言没有意义,No:不适用此版本。
下面我简述几个新功能,剩下的我会把文档链接拿出来本身观摩。
上面的代码中都有体现。
var s = $"{p.Name} is {p.Age} year{{s}} old";
var numbers = new Dictionary<int, string> { [7] = "seven", [9] = "nine", [13] = "thirteen" };
public class Customer { public string First { get; set; } = "Jane"; public string Last { get; set; } = "Doe"; }
using static System.Console; using static System.Math; using static System.DayOfWeek; class Program { static void Main() { WriteLine(Sqrt(3*3 + 4*4)); WriteLine(Friday - Monday); } }
线上代码可执行演示文档链接:http://www.volatileread.com/Wiki/Index?id=1075 效果以下
参考文档:https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6
链接地址:https://msdn.microsoft.com/en-us/magazine/ff796223.aspx
链接地址:https://msdn.microsoft.com/en-us/library/bb308966.aspx
链接地址:https://msdn.microsoft.com/en-us/library/7cz8t42e(v=vs.80).aspx
接下来是你们最喜欢的总结内容啦,内容有二,以下:
一、但愿能关注我其余的文章。
二、博客里面有没有很清楚的说明白,或者你有更好的方式,那么欢迎加入左上方的2个交流群,咱们一块儿学习探讨。