如何在VB.NET中使用隐式实现创建接口

时间:2009-11-06 07:24:39

标签: c# vb.net interface

在C#中,我可以创建一个接口,当我使用该接口时,编译器知道基类满足了某些接口要求。这可能更清楚,例如:

interface FormInterface
{
    void Hide();
    void Show();
    void SetupForm();
}

public partial class Form1 : Form, FormInterface
{
    public Form1()
    {
        InitializeComponent();
    }

    public void SetupForm()
    {

    }
}

编译器知道Hide()和Show()是在Form中实现的,上面的代码编译得很好。我无法弄清楚如何在VB.NET中这样做。当我尝试:

Public Interface FormInterface
    Sub Hide()
    Sub Show()
    Sub SetupForm()
End Interface


Public Class Form1
    Inherits System.Windows.Forms.Form
    Implements FormInterface

    Public Sub SetupForm() Implements FormInterface.SetupForm

    End Sub

End Class

但编译器抱怨Form1必须为接口'FormInterface'实现'Sub Hide()'。我实际上是否必须添加以下内容?

Public Sub Hide1() Implements FormInterface.Hide
    Hide()
End Sub

在我的所有表单上,或者是创建具有SetupForm()的抽象基类的更好的路径(以及如何在VB.NET中执行此操作)?

2 个答案:

答案 0 :(得分:3)

不,System.Windows.Forms.Form没有实现FormInterface,因此VB.NET不知道它们匹配。 VB.NET不做隐式接口实现,只是显式。

是的,您应该创建一个基类并在其上实现您的接口。但是,我会将它们命名为略有不同。也许DoShowDoHide

这样的事情:

Public Class BaseForm
    Inherits System.Windows.Forms.Form
    Implements FormInterface

    Public Sub SetupForm() Implements FormInterface.SetupForm

    End Sub

    Public Sub DoShow() Implements FormInterface.DoSHow
        Me.Show()
    End Sub

    Public Sub DoHide() Implements FormInterface.DoHide
        Me.Hide()
    End Sub

End Class

否则你可以偶然做到这一点:

  Public Class BaseForm
    Inherits System.Windows.Forms.Form
    Implements FormInterface

    Public Sub SetupForm() Implements FormInterface.SetupForm

    End Sub

    Public Sub Show() Implements FormInterface.SHow
        Me.Show()
    End Sub

    Public Sub Hide() Implements FormInterface.Hide
        Me.Hide()
    End Sub

End Class

那会崩溃并燃烧。

不要创建基类MustInherit,因为表单设计者不会喜欢它。

答案 1 :(得分:0)

除非您打算在Form成员中使用Form1类的受保护成员,否则我将使用包含关系而不是继承。因此,您的FormInterface会被命名为IFormWrapper,而您的实现将是这样的(我在C#中显示它,因为它是我的工作语言,我认为您将能够翻译这个想法到VB):

public class Form1 : IFormWrapper
{
    private readonly Form form;

    public Form1 {
        this.form=new Form();
    }

    public void Show() {
        form.Show();
    }

    public void Hide() {
        form.Hide();
    }

    public void SetupForm() {
        //Code for the setup method
    }
}

毕竟,如果您计划在Form1课程中使用FormInterface个实例,那么除了FormShow以外,您将无法访问Hide个成员{1}}。