代码简化和性能上

时间:2022-01-11 06:34:08

自从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

默认表达式

参考文档:

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它们来声明它们,但需要指定完整的类型。

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); }

Switch statements with patterns 扩展switch语句使用模式匹配

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; } }

元组(Tuples)

注意:元组依赖于一组根本类型,不包孕在预览4中。要使成果正常事情,您可以通过NuGet轻松获取它们:

右键单击解决方案资源打点器中的项目,然后选择“打点NuGet软件包...”

选择“浏览”选项卡,选中“包罗预刊行”,然后选择“nuget.org”作为“包源”

搜索“System.ValueTuple”并安置它。