跳至正文
首页 » 博客 » What is the Extension Method in C#?

What is the Extension Method in C#?

我经常得到有关C # 中的扩展方法的问题。扩展方法是在C #3.0版中引入的。并允许我们在现有类中添加功能,而无需修改,扩展或重新编译它。

本质上,扩展方法允许我们向现有类添加一个新方法:

  • 无需修改或添加代码
  • 而不扩展它或创建新的派生类型
  • 无需重新编译类

扩展方法是一种特殊的静态方法,但可以像实例方法一样在对象上调用。因此,扩展方法可以以与普通实例方法相同的方式使用。

步骤创建一个扩展方法

步骤1: 包含扩展方法或扩展方法定义一个静态可见类。通过应用适当的访问修饰符,确保类对客户端代码可见。

步骤2: 至少创建一个与包含类具有相同可见性级别的静态方法。

步骤3: 扩展方法的第一个参数始终指定该方法所操作的类型。确保类型名称前面带有 “this” 修饰符。

步骤4: 在调用代码中,添加包含扩展方法类的命名空间。

步骤5: 在同一实例中使用扩展方法的类型可以使用方法。请记住,我们不需要传递第一个参数,因为它表示类型,但是我们应该传递第二个参数来调用扩展方法。

让我们创建一个扩展方法!

让我们继续为String类创建一个扩展方法。string类没有任何WordCount方法。让我们从创建控制台应用程序项目开始,然后向控制台应用程序项目添加一个类。我们将类命名为StringExtension

创建类后,我们必须执行前面讨论的步骤:

  1. 使类静态和公共在这种情况下
  2. 添加静态方法
  3. 由于类是公共的,使方法公共太
  4. 传递第一个参数的静态方法作为名称的类前面有关键字 “这个”
  5. 编写代码内部方法来实现功能
命名空间ExtensionMethodDemo{    StringExtension公共静态{        WordCount (字符串 =) public static int{            int count = 0对于 (int i = 0; i < s.Length; i){                如果 (s[i] !=  ”){                    如果 ((i 1) = = s.Length){计数;}                    其他{                        如果 (s[i 1] = =  ”){计数;}}}}            返回计数;}}}

在上面的代码清单中,我们创建了一个扩展方法来计算给定字符串中的单词数。您可能会注意到:

  1. StringExtension类是一个公共静态类;
  2. WordCount方法是一个公共静态方法;
  3. 第一个参数在WordCount方法是一个字符串,因为我们正在创建WordCount作为扩展方法的字符串类;
  4. 第一个参数类型字符串前面带有关键字 “这个”。

在使用扩展方法之前,让我们编译项目。为此,我们需要执行以下步骤:

  1. 如果我们在不同的库中创建了扩展方法,则将DLL添加到客户端项目。
  2. 使用using指令添加扩展方法类的命名空间。
  3. 使用扩展方法作为普通实例方法。

我们可以使用新创建的扩展方法,如下面的清单所示:

使用系统命名空间: ExtensionMethodDemo{    程序{        静态void Main (string [] args){Console.WriteLine( "Enter a senetence" );            字符串inputstr = Console.ReadLine();            int numberofword = inputstr.WordCount();Console.WriteLine(numberofword);Console.ReadKey( true );}}}

正如我们在上面的清单中注意到的,扩展方法WordCount用于计算句子中的单词数。Visual Studio还通过在方法名称旁边附加word Extension来显示intellisense中的扩展方法,如下图所示:

正如我们所看到的,我们可以以与任何实例方法相同的方式使用扩展方法。可能有一个场景,我们有一个实例方法和一个具有相同名称和签名的扩展方法。在这种情况下,always实例方法比扩展方法具有更高的优先级。关于扩展方法,我们应该记住几个要点:

  1. 它的优先级低于实例方法,因此,如果类具有扩展方法和具有相同名称和签名的实例方法,则实例方法具有优先级。
  2. 如果扩展方法与目标类型的成员方法冲突,则始终调用成员方法而不是扩展方法。
  3. 扩展方法只能访问目标类型的私有成员。

扩展方法对于在现有类中添加功能非常有用。许多LINQ函数都是作为扩展方法实现的。希望这里提供的信息对您的项目有所帮助,并感谢您的阅读!</p