1

基类:

Public MustInherit Class Connector

    Public Event Changed as EventHandler

End Class

界面:

Public Interface IPlug

    Event Changed as EventHandler

End Interface

派生类:

Public Class OutputConnector
    Inherits Connector
    Implements IPlug

    Event Changed as EventHandler Implements IPlug.Changed

End Class

VB.Net 问题:

当然,中的事件与中的事件Changed发生OutputConnector冲突。但我必须实现它以满足接口。ChangedConnectorIPlug

我该如何解决这个问题?

我有其他派生自Connector(例如一个InputConnector类)的类需要有Changed事件,但不实现IPlug。而且我不希望正在实现IPlug的派生类有一个额外的事件,只是为了避免名称冲突(如果我在基类或接口中更改了事件的名称,就会出现这种情况)。

有什么建议么?

编辑:

问题不在于名称本身,而是我希望派生类以某种方式将其接口事件实现映射到基类中的现有事件 - 而不必在派生类中声明附加事件(使用各种路由杂乱无章的启动);毕竟,事件已经存在于基类中!我需要的是一种让界面知道的方法..

一个伪解决方案(只是为了说明)将能够使某些东西达到

Public Event MyBase.Changed Implements IPlug.Changed

在派生OutputConnector类中。

4

1 回答 1

0

这个问题指出了两种使接口实现显式的方法。

  • 将其设为私有
  • 使用实现的名称不需要与接口名称匹配的事实。

所以这取决于你打算如何使用IPlug.Changed. 如果您将始终使用该接口进行交互,那么您可以简单地将其设为私有,即使它需要Shadows它也不会通过公共 API 可见。

另一种方法是为声明决定一个新名称,例如OutputConnector.IPlugChanged.

您选择哪个取决于您如何使用所有内容。

编辑:

您似乎希望这两个事件在功能上相同。

在这种情况下,最好的办法是IPlug.Changed通过使用不同的名称将其设为私有来隐藏实现。

一旦你隐藏了IPlug.Changed,使用你的OnChange受保护方法(假设你做了一个)来连接两者,在触发IPlugChanged时调用。OnChange

如果您没有OnChange受保护的方法,则可以附加一个执行上述调用的事件。请注意,如果您担心调用订单事件,这将不起作用。

最后一个选项可能是使用自定义语法将更改流式传输IPlug到基类。

于 2013-02-12T03:47:05.880 回答