繁体   English   中英

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

[英]How can I create an interface in VB.NET with implicit implementations

在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中执行此操作)?

不, 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,因为表单设计者不会喜欢它。

除非您打算在Form1成员中使用Form类的受保护成员,否则我将使用包含关系而不是继承。 所以你可以让你的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
    }
}

毕竟,如果您计划通过FormInterface类使用Form1实例,那么除了ShowHide之外,您将无权访问Form成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM