如何在 VB.net 中实现这样的接口

本文关键字:接口 实现 VB net | 更新日期: 2024-10-30 12:01:31

在C#项目中,我有一个这样的接口:

public interface IView
{
    event EventHandler Load;
}

我在 WebForms 的用户控件中实现它,如下所示:

public partial class LoginUserControl : UserControl, IView
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

因为用户控件的基本控件具有事件调用 Load,所以我不需要在 LoginUserControl 中写入任何内容。

但是,在 vb.net 中,我像这样声明接口:

Public Interface IView
    Event Load As EventHandler
End Interface

还有像这样的登录用户控件:

Partial Public Class LoginUserControl
    Inherits UserControl
    Implements IView
    Protected Sub Page_Load(sender As Object, e As EventArgs)
    End Sub
End Class

它无法构建,因为缺少工具。 但我补充说

Public Event Load As EventHandler Implements IView.Load

与说, 与基类混淆,应声明为"影子"

我该怎么办?

更新 12/18

我不想隐藏基类事件。我只想要像 C# 这样的行为。

例如。

我有一个班级:

class A : IView 

然后我必须实现 Load 事件。但是如果我有一个类:

class B : Control, IView

基类控件具有相同的名称 Load,我不需要在 B 中实现任何东西。

更新 12/18

哦,是的,这是解决方案。 但是,wtxxxx,它看起来很痛。但是,谢谢大家。

如何在 VB.net 中实现这样的接口

你不需要

使用"Shadows" - 只需在实现时更改名称:

Private Event IView_Load As EventHandler Implements IView.Load

您的类仍然实现 IView.Load,并且在通过 IView 实例访问时仍然可以使用名称"Load"

如果声明的元素与基类中定义的元素同名。 在这种情况下,此类中的元素应 Shadow 基类元素。因此,您可以在此处将 Shadows 关键字添加到声明中,或更改要声明的元素的名称。

Partial Public Class LoginUserControl
    Inherits System.Web.UI.UserControl
    Implements IView
    Public Shadows Event Load As EventHandler Implements IView.Load
    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    End Sub
End Class

Public Interface IView
    Event Load As EventHandler
End Interface