c# - 如何使用隐式实现在 VB.NET 中创建接口(interface)

标签 c# vb.net interface

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

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 必须为接口(interface)“FormInterface”实现“Sub Hide()”。我真的必须添加以下内容吗?

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

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

最佳答案

不,System.Windows.Forms.Form 没有实现 FormInterface,所以 VB.NET不知道他们匹配。 VB.NET 不执行隐式接口(interface)实现,只执行显式。

是的,您应该创建一个基类并在其上实现您的接口(interface)。但是,我会给它们命名略有不同。可能是 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

那会崩溃和燃烧。

不要让基类必须继承,因为表单设计者不喜欢那样。

关于c# - 如何使用隐式实现在 VB.NET 中创建接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1685976/

相关文章:

c# - MVC 3 : Where can I find default templates for DisplayForModel and EditorForModel?

c# - 启动画面 IOException

c# - 进程间通信能否像进程内事件一样快(使用wcf和c#)

asp.net - 将 Excel 文件从 ASP.NET 应用程序上传到 MySQL 时出错

javascript - TypeScript 中的接口(interface)和类

TypeScript 扩展接口(interface)/类型的所有值类型

c# - Java 到 C# 的转换

arrays - 检查字符串数组是否包含不带循环的非空字符串

.net - 如何使用泛型方法替换重复的属性?

java - 为什么有些开发人员在 Java 的接口(interface)中声明 String 对象,它是如何工作的?