次の方法で共有


方法: 拡張メソッドを記述する (Visual Basic)

拡張メソッドを使用すると、既存のクラスにメソッドを追加できます。 拡張メソッドは、そのクラスのインスタンスであるかのように呼び出すことができます。

拡張メソッドを定義するには

  1. Visual Studio で新規または既存の Visual Basic アプリケーションを開きます。

  2. 拡張メソッドを定義するファイルの先頭に、次の import ステートメントを含めます。

    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で拡張メソッドを宣言します。 2 つ目のモジュール Module1StringExtensions をインポートし、メソッドを呼び出します。 拡張メソッドは、呼び出されたときにスコープ内にある必要があります。 拡張メソッド 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!!!!

こちらも参照ください