次の方法で共有


チュートリアル: インターフェイスの作成と実装 (Visual Basic)

インターフェイスはプロパティ、メソッド、およびイベントの特性を記述しますが、実装の詳細は構造体またはクラスに任せます。

このチュートリアルでは、インターフェイスを宣言して実装する方法について説明します。

このチュートリアルでは、ユーザー インターフェイスを作成する方法については説明しません。

次の手順では、一部の Visual Studio ユーザー インターフェイス要素の名前や場所がコンピューターに異なる場合があります。 これらの要素は、使用している Visual Studio エディションと使用する設定によって決まります。 詳細については、「IDEのカスタマイズ」を参照してください。

インターフェイスを定義するには

  1. 新しい Visual Basic Windows アプリケーション プロジェクトを開きます。

  2. [プロジェクト] メニューの [モジュールの追加] をクリックして、新しいモジュールをプロジェクト追加します。

  3. 新しいモジュールに Module1.vb 名前を付け、[ 追加] をクリックします。 新しいモジュールのコードが表示されます。

  4. TestInterface内で Module1 という名前のインターフェイスを定義するには、Interface TestInterface ステートメントと Module ステートメントの間にEnd Moduleを入力し、Enter キーを押します。 コード エディターは、Interface キーワードをインデントし、End Interface ステートメントを追加してコード ブロックを形成します。

  5. InterfaceステートメントとEnd Interface ステートメントの間に次のコードを配置して、インターフェイスのプロパティ、メソッド、およびイベントを定義します。

    Property Prop1() As Integer
    Sub Method1(ByVal X As Integer)
    Event Event1()
    

実装

インターフェイス メンバーの宣言に使用される構文は、クラス メンバーの宣言に使用される構文とは異なる場合があります。 この違いは、インターフェイスに実装コードを含めることができないという事実を反映しています。

インターフェイスを実装するには

  1. ImplementationClassという名前のクラスを追加するには、次のステートメントをModule1に追加し、End Interface ステートメントの後に、End Module ステートメントの前に追加し、Enter キーを押します。

    Class ImplementationClass
    

    統合開発環境内で作業している場合は、Enter キーを押すと、 コード エディター によって一致する End Class ステートメントが提供されます。

  2. 次の Implements ステートメントを ImplementationClassに追加します。このステートメントは、クラスが実装するインターフェイスに名前を付けます。

    Implements TestInterface
    

    クラスまたは構造体の先頭にある他の項目とは別にリストされている場合、 Implements ステートメントは、クラスまたは構造体がインターフェイスを実装していることを示します。

    統合開発環境内で作業している場合、 コード エディター では、Enter キーを押したときに TestInterface に必要なクラス メンバーが実装され、次の手順をスキップできます。

  3. 統合開発環境内で作業していない場合は、インターフェイス MyInterfaceのすべてのメンバーを実装する必要があります。 次のコードを ImplementationClass に追加して、 Event1Method1、および Prop1を実装します。

    Event Event1() Implements TestInterface.Event1
    
    Public Sub Method1(ByVal X As Integer) Implements TestInterface.Method1
    End Sub
    
    Public Property Prop1() As Integer Implements TestInterface.Prop1
        Get
        End Get
        Set(ByVal value As Integer)
        End Set
    End Property
    

    Implements ステートメントは、実装するインターフェイスとインターフェイス メンバーに名前を付けます。

  4. プロパティ値を格納したクラスにプライベート フィールドを追加して、 Prop1 の定義を完了します。

    ' Holds the value of the property.
    Private pval As Integer
    

    プロパティ get アクセサーから pval の値を返します。

    Return pval
    

    プロパティ セット アクセサーで pval の値を設定します。

    pval = value
    
  5. 次のコードを追加して、 Method1 の定義を完了します。

    MsgBox("The X parameter for Method1 is " & X)
    RaiseEvent Event1()
    

インターフェイスの実装をテストするには

  1. ソリューション エクスプローラーでプロジェクトのスタートアップ フォームを右クリックし、[コードの表示] をクリックします。 エディターには、スタートアップ フォームのクラスが表示されます。 既定では、スタートアップ フォームは Form1 と呼ばれます。

  2. testInstance クラスに次のForm1 フィールドを追加します。

    Dim WithEvents testInstance As TestInterface
    

    testInstanceWithEventsとして宣言することで、Form1 クラスはそのイベントを処理できます。

  3. Form1によって発生したイベントを処理するために、次のイベント ハンドラーを testInstance クラスに追加します。

    Sub EventHandler() Handles testInstance.Event1
        MsgBox("The event handler caught the event.")
    End Sub
    
  4. Testという名前のサブルーチンを Form1 クラスに追加して、実装クラスをテストします。

    Sub Test()
        '  Create an instance of the class.
        Dim T As New ImplementationClass
        ' Assign the class instance to the interface.
        ' Calls to the interface members are 
        ' executed through the class instance.
        testInstance = T
        ' Set a property.
        testInstance.Prop1 = 9
        ' Read the property.
        MsgBox("Prop1 was set to " & testInstance.Prop1)
        '  Test the method and raise an event.
        testInstance.Method1(5)
    End Sub
    

    Test プロシージャは、MyInterfaceを実装し、そのインスタンスを testInstance フィールドに割り当て、プロパティを設定し、インターフェイスを介してメソッドを実行するクラスのインスタンスを作成します。

  5. スタートアップ フォームのTest プロシージャからForm1 Load プロシージャを呼び出すコードを追加します。

    Private Sub Form1_Load(ByVal sender As System.Object,
                           ByVal e As System.EventArgs) Handles MyBase.Load
        Test() ' Test the class.
    End Sub
    
  6. F5 キーを押して、 Test プロシージャを実行します。 "Prop1 は 9 に設定されました" というメッセージが表示されます。 [OK] をクリックすると、"Method1 の X パラメーターは 5" というメッセージが表示されます。 [OK] をクリックすると、"イベント ハンドラーがイベントをキャッチしました" というメッセージが表示されます。

こちらも参照ください