如何在 VB.NET 中创建具有隐式实现的接口
Posted
技术标签:
【中文标题】如何在 VB.NET 中创建具有隐式实现的接口【英文标题】:How can I create an interface in VB.NET with implicit implementations 【发布时间】:2010-12-13 17:54:45 【问题描述】:在 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 中如何做到这一点)?
【问题讨论】:
@Kris Erickson:我不明白这个“隐式实现”的东西......无论如何,我想接口必须完全按照对基类的反对来实现。接口将其实现强制到派生类中。如果您只想添加这些方法,我可能会考虑一个基本抽象类(VBNET 中的 MustInherit)。这是否足以满足您的需求? 【参考方案1】:除非您打算在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
实例,那么除了Show
和Hide
之外,您将无法访问Form
成员。
【讨论】:
【参考方案2】:不,System.Windows.Forms.Form
没有实现 FormInterface,所以VB.NET 不知道它们匹配。 VB.NET 不做隐式接口实现,只是显式实现。
是的,您应该创建一个基类并在其上实现您的接口。但是,我会为它们命名略有不同。也许DoShow
和DoHide
。
类似这样的:
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,因为表单设计者不喜欢这样。
【讨论】:
以上是关于如何在 VB.NET 中创建具有隐式实现的接口的主要内容,如果未能解决你的问题,请参考以下文章
在visual basic(而不是VB.net)中创建一个错误弹出框