拡張メソッドを使用すると、既存のクラスにメソッドを追加できます。 拡張メソッドは、そのクラスのインスタンスであるかのように呼び出すことができます。
拡張メソッドを定義するには
Visual Studio で新規または既存の Visual Basic アプリケーションを開きます。
拡張メソッドを定義するファイルの先頭に、次の import ステートメントを含めます。
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
で拡張メソッドを宣言します。 2 つ目のモジュール 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
メソッドは 2 つのパラメーターで定義され、1 つだけで呼び出されることに注意してください。 メソッド定義内の最初のパラメーターaString
は、メソッドを呼び出すexample
のインスタンスであるString
にバインドされます。 この例の出力は次のとおりです。
Hello?
Hello!!!!
こちらも参照ください
.NET