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

在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类的受保护成员,否则我将使用包含关系而不是inheritance。 所以你可以让你的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成员。