扩展方法使你可以向现有类添加方法。 可以调用扩展方法,就像它是该类的实例一样。
定义扩展方法
在 Visual Studio 中打开新的或现有的 Visual Basic 应用程序。
在要在其中定义扩展方法的文件顶部,添加以下导入语句:
Imports System.Runtime.CompilerServices
在新的或现有应用程序的模块中,使用
<Extension>
属性开始方法定义:<Extension()>
请注意,该
Extension
属性只能应用于 Visual BasicSub
中的方法(或Function
过程)。 如果将它应用于某个Class
或某个Structure
方法,则 Visual Basic 编译器 会在BC36551生成错误,“扩展方法只能在模块中定义。以普通方式声明方法,但第一个参数的类型必须是要扩展的数据类型。
<Extension()> Public Sub SubName(para1 As ExtendedType, <other parameters>) ' < Body of the method > End Sub
示例:
以下示例在模块 StringExtensions
中声明扩展方法。 第二个模块, Module1
导入 StringExtensions
并调用该方法。 在调用扩展方法时,该扩展方法必须位于范围内。 扩展方法 PrintAndPunctuate
为 String 类添加了一个方法,该方法显示字符串实例,并在其后附加作为参数发送的标点符号字符串。
' 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!!!!