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

使用扩展方法可以将方法添加到现有类。 可以像调用该类的实例一样调用扩展方法。

定义扩展方法

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

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

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

    VB
    <Extension()>
    

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

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

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

示例

以下示例在模块 StringExtensions 中声明扩展方法。 第二个模块 Module1 将导入 StringExtensions 并调用该方法。 调用扩展方法时,该方法必须在作用域内。 扩展方法 PrintAndPunctuate 将为 String 类扩展一个方法,该方法显示字符串实例,后跟作为参数发送的标点符号字符串。

VB
' 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
VB
' 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!!!!

另请参阅