【问题标题】:How to implement the interface like this in VB.net [duplicate]如何在VB.net中实现这样的接口[重复]
【发布时间】:2013-12-18 06:30:24
【问题描述】:

在 C# 项目中,我有一个这样的界面:

public interface IView
{
    event EventHandler Load;
}

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

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

因为用户控件的基础控件有事件调用加载,我不需要在登录用户控件中写任何东西。

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

Public Interface IView
    Event Load As EventHandler
End Interface

还有这样的 LoginUserControl:

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

vs 说, 与基类冲突,应声明为“Shadow”

我该怎么办?

12/18 更新

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

例如。

我有一堂课:

class A : IView 

然后我必须实现 Load 事件。 但如果我有课:

class B : Control, IView

基类Control同名Load, 我不需要在 B 中实现任何东西。

12/18 更新

哦,是的,here 是解决方案。但是,wtxxxx,它看起来很糟糕。 但是,谢谢大家。

【问题讨论】:

    标签: c# asp.net vb.net


    【解决方案1】:

    您不需要使用“Shadows” - 只需在实施时更改名称即可:

    Private Event IView_Load As EventHandler Implements IView.Load
    

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

    【讨论】:

      【解决方案2】:

      如果一个元素被声明为与基类中定义的元素同名。在这种情况下,这个类中的元素应该是基类元素的影子。 所以在这里你可以在声明中添加 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
      

      【讨论】:

      • 不,我不想影响基类事件。看看我的更新。
      • @GeminiYellow:我认为 VB.Net 不允许像 C# 这样的隐式接口实现,因此像您解释的相同代码没有直接的 VB.Net 相关性。所以我在 vb.net 中能想到的最接近的想法是使用“Shadows”关键字。
      • 感谢您的帮助。您能发布一些解决方案的代码吗?我真的不知道怎么写vb.net。如果使用Shadows,基类Load 会被隐藏,对吧?以及如何引发 IView.Load 和 Control.Load 事件。
      • @GeminiYellow:即使我在 vb.net 上也不是很舒服。但我认为您可以通过创建一些包装类来自定义它。我可以在 (stackoverflow.com/questions/6493254/…) 上看到同样的问题
      猜你喜欢
      • 2012-07-16
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2012-03-01
      • 2012-05-10
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多