它通常与 ref returns 一起使用

时间:2022-04-11 01:23:53

 

第一部分:

C#是一种通用的,类型安适的,面向东西的编程语言。有如下特点:

(1)面向东西:c# 是面向东西的典型的一个丰富实现, 它包孕封装、担任和多态性。C#面向东西的行为包孕:

统一的类型系统

类与接口

属性、要领、事件

(2)类型安适:C#还允许通过dynamic关键字动态指定类型。 但是,C#仍然是一个主要的静态类型语言。之所以是一种强类型的语言,是因为它的类型法则长短常严格的,例如,不能够使用一个float类型的参数去挪用一个解释int 类型的函数,除非显式的把float转换为int ,这样有助于防备编码错误。

(3)内存打点:C#依赖运行时的自动内存打点,它的大众语言运行库有一个垃圾回收器,在合适非时间回收不再引用的东西所占的空间,这就释放了措施员手动释放东西的内存。C#并没有消除指针,它只是使大大都编程任务不需要使用指针,对付性能要求高的处所,还是可以使用指针的,但是只允许在显式符号为不安适的代码块中使用。

(4)C#和CLR:C#是依赖runtime供给的内存打点和异常措置惩罚惩罚,CLR允许开发者使用差此外语言成立应用措施。C#是被编译成托管代码的几种托管语言之一。托管代码以中间语言或IL暗示。CLRIL转换成机器的本地代码,例如X86X64,凡是就在此之前执行,这被称为即时(Just-In-TimeJIT)编译。 提前时间编译也可用于改进大型措施集的启动时间,或资源受限的设备。元数据的存在允许,措施集引用其他措施集中的类型而不需要特别的文件。

(5)CRL和 .Net Framework的关系

.NET Framework由CLR和大量的库构成;该类库中包罗核心类库(也就是根本类库BCL)和应用类库,应用类库又依赖核心类库

它通常与 ref returns 一起使用

 

婆婆妈妈说了这么多,我相信大家都知道,好了,下面我们通过代码来看看C#7.0到底有哪些让你拍手叫好的处所。

第二部分:C#7.0新增的成果

(1)数字字面量的提升:

C#7中的数字文字可以包罗下划线以提高可读性,这些被称为数字分隔断绝分手符,并被编译器忽略。

代码如下:

它通常与 ref returns 一起使用

运行功效:

它通常与 ref returns 一起使用

注意:二进制文字可以用0b前缀指定。

所以见到这种写法你不要惊讶,只是为了提高可读性。

(2)Out variables and discards(接收out变量和抛弃out变量)

代码:

以前我们的写法:

 

此刻C#7.0中可以这样写:

它通常与 ref returns 一起使用

我们不需要在外面先界说好要接收值的变量,而是直接在里面写,是不是代码更简洁,此外一个有趣的处所是,当一个要领要返回多个值的时候,我们可以使用 out _,来选择性的接收返回来的值,在上面图中的代码中,要领SomeBigMethod返回四个值,但是我们在接收它返回来的值时,可以使用out _不接收返回来的值,而使用out int x,来接收返回来的值,是不是很灵活。

代码运行功效如下:

它通常与 ref returns 一起使用

ILSpy功效:

// Methods .method private hidebysig static void Main ( string[] args ) cil managed { // Method begins at RVA 0x2050 // Code size 49 (0x31) .maxstack 4 .entrypoint .locals init ( [0] int32, [1] bool, [2] int32, [3] int32, [4] int32, [5] int32 ) // (no C# code) IL_0000: nop // bool successful = int.TryParse("123", out result); IL_0001: ldstr "123" IL_0006: ldloca.s 0 IL_0008: call bool [System.Runtime]System.Int32::TryParse(string, int32&) IL_000d: stloc.1 // SomeBigMethod(out int _, out int _, out int x, out int _); IL_000e: ldloca.s 3 IL_0010: ldloca.s 4 IL_0012: ldloca.s 2 IL_0014: ldloca.s 5 IL_0016: call void ConsoleApp1.Program::SomeBigMethod(int32&, int32&, int32&, int32&) // (no C# code) IL_001b: nop // Console.WriteLine(x); IL_001c: ldloc.2 IL_001d: call void [System.Console]System.Console::WriteLine(int32) // (no C# code) IL_0022: nop // Console.WriteLine(result); IL_0023: ldloc.0 IL_0024: call void [System.Console]System.Console::WriteLine(int32) // (no C# code) IL_0029: nop // Console.ReadKey(); IL_002a: call valuetype [System.Console]System.ConsoleKeyInfo [System.Console]System.Console::ReadKey() IL_002f: pop // (no C# code) IL_0030: ret } // end of method Program::Main

(3)Patterns

感化:你可以使用is运算符来引入一个变量,这个变量被称为模式变量。不大白,看个例子就大白了。

代码如下:

它通常与 ref returns 一起使用

解析:x is string s 的感化是:如果x 可以被转换为string 转换后的值赋值给了s ,所以输出的功效就是字符串的长度。

此中switch的声明也撑持这种模式,而且还可以使用when子句指定条件,代码如下:

它通常与 ref returns 一起使用

 运行功效: