Csharp/C#教程:为什么我们在扩展方法中使用“this”?分享


为什么我们在扩展方法中使用“this”?

我想问为什么我们在扩展方法(C#语言)中的参数之前使用“this”关键字………..喜欢这个函数:

public static int ToInt(this string number) { return Int32.Parse(number); } 

我知道我们必须使用它,但我不知道为什么。

因为这是你告诉编译器它首先是扩展方法的方式。 否则它只是一个普通的静态方法。 我猜他们选择了this所以他们不必提出一个新的关键字,并可能打破旧代码。

有关信息,此处作为上下文关键字的重要性主要在于它避免引入关键字。 每当您引入新关键字时,您都有可能破坏将其用作变量/类型名称的代码。 this有一些有用的function:

这意味着不会破坏现有代码。

除了选择this作为关键字之外,它只是编译器的一种方便的语法,比手动添加[Extension]更方便。 如果没有,它只是一个静态方法,没有任何特殊行为。

它只是将它标记为扩展方法,这是他们选择将该方法定义为扩展方法的格式,而不是普通的静态方法(无论如何在内部调用它)。 这仅适用于编译器 (和intellisense),在您的代码编译的情况下,就像您直接调用静态方法一样。

这个方法的定义:

 public static int ToInt(string number) //non extension 

需要与此区别开来:

 public static int ToInt(this string number) //extension 

否则,你会在包含的命名空间中包含静态类中的每个静态方法的intellisense,这是非常不受欢迎的。

主要是因为它是C#规范定义扩展方法的方式。 见10.6.9节

10.6.9扩展方法

当方法的第一个参数包含this修饰符时,该方法被称为扩展方法。 扩展方法只能在非generics的非嵌套静态类中声明。 扩展方法的第一个参数除此之外不能有任何修饰符,参数类型不能是指针类型。

为了将方法识别为扩展方法。 编译器怎么知道呢?

它只是选择用于指示扩展方法的语法。 以下是关于C#和vb.net之间扩展方法语法差异的一个有趣观点: 扩展方法C#和VB.NET之间的实现差异

上述就是C#学习教程:为什么我们在扩展方法中使用“this”?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1000640.html

(0)
上一篇 2021年12月28日
下一篇 2021年12月28日

精彩推荐