如何:编写扩展方法(Visual Basic)

扩展方法使你可以向现有类添加方法。 可以调用扩展方法,就像它是该类的实例一样。

定义扩展方法

  1. 在 Visual Studio 中打开新的或现有的 Visual Basic 应用程序。

  2. 在要在其中定义扩展方法的文件顶部,添加以下导入语句:

    Imports System.Runtime.CompilerServices
    
  3. 在新的或现有应用程序的模块中,使用 <Extension> 属性开始方法定义:

    <Extension()>
    

    请注意,该Extension属性只能应用于 Visual Basic Sub中的方法(或Function过程)。 如果将它应用于某个 Class 或某个 Structure方法,则 Visual Basic 编译器 会在BC36551生成错误,“扩展方法只能在模块中定义。

  4. 以普通方式声明方法,但第一个参数的类型必须是要扩展的数据类型。

    <Extension()>
    Public Sub SubName(para1 As ExtendedType, <other parameters>)
         ' < Body of the method >
    End Sub
    

示例:

以下示例在模块 StringExtensions中声明扩展方法。 第二个模块, Module1导入 StringExtensions 并调用该方法。 在调用扩展方法时,该扩展方法必须位于范围内。 扩展方法 PrintAndPunctuateString 类添加了一个方法,该方法显示字符串实例,并在其后附加作为参数发送的标点符号字符串。

' Declarations will typically be in a separate module.
Imports System.Runtime.CompilerServices

Module StringExtensions
    <Extension()>
    Public Sub PrintAndPunctuate(aString As String, punc As String)
        Console.WriteLine(aString & punc)
    End Sub

End Module
' Import the module that holds the extension method you want to use,
' and call it.

Imports ConsoleApplication2.StringExtensions

Module Module1

    Sub Main()
        Dim example = "Hello"
        example.PrintAndPunctuate("?")
        example.PrintAndPunctuate("!!!!")
    End Sub

End Module

请注意,该方法使用两个参数定义,只调用一个参数。 方法定义中的第一个参数 aString 与调用该方法的 example 实例 String 绑定。 示例的输出如下所示:

Hello?
Hello!!!!

另请参阅