演练:创建和实现接口 (Visual Basic)

接口描述属性、方法和事件的特征,但将实现细节留给结构或类来处理。

本演练演示如何声明和实现接口。

注意

本演练不提供有关如何创建用户界面的信息。

注意

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅个性化设置 IDE

定义接口

  1. 打开一个新的 Visual Basic Windows 应用程序项目。

  2. 在“项目”菜单中单击“添加模块”,将一个新模块添加到项目中。

  3. 将新模块命名为 Module1.vb,然后单击“添加”。 此时将显示新模块的代码。

  4. 通过在 ModuleEnd Module 语句之间键入 Interface TestInterface 并按 ENTER,在 Module1 中定义名为 TestInterface 的接口。 代码编辑器会缩进 Interface 关键字并添加 End Interface 语句以形成代码块。

  5. 通过在 InterfaceEnd Interface 语句之间添加以下代码来定义接口的属性、方法和事件:

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

实现

你可能已注意到,用于声明接口成员的语法与用于声明类成员的语法不同。 这种差异反映了接口不能包含实现代码这一事实。

实现接口

  1. 通过在 Module1End Interface 语句的后面、End Module 语句的前面添加以下语句,然后按 ENTER,来添加名为 ImplementationClass 的类:

    Class ImplementationClass
    

    如果在集成开发环境中操作,按 ENTER 后,代码编辑器会提供匹配的 End Class 语句。

  2. 将以下 Implements 语句添加到 ImplementationClass,用于命名类实现的接口:

    Implements TestInterface
    

    当与某个类或结构顶部的其他项分开列出时,Implements 语句将指示该类或结构实现一个接口。

    如果在集成开发环境中操作,按 ENTER 后,代码编辑器会实现 TestInterface 所需的类成员,然后你可以跳过下一步。

  3. 如果不在集成开发环境中操作,则必须实现接口 MyInterface 的所有成员。 将以下代码添加到 ImplementationClass 以实现 Event1Method1Prop1

    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
    

    在属性 set 访问器中设置 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
    

    通过将 testInstance 声明为 WithEventsForm1 类可以处理其事件。

  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. 添加代码以从启动窗体的 Form1 Load 过程调用 Test 过程:

    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 was set to 9”。 单击“确定”后,将显示消息“The X parameter for Method1 is 5”。 单击“确定”,随即会显示消息“The event handler caught the event”。

请参阅