基类:
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
事件当然与Changed
中的Connector
事件冲突。但我必须实现它以满足IPlug
接口。
我该如何解决这个问题?
我还有其他来自Connector
(例如InputConnector
类)的类,需要有Changed
个事件,但是没有实现IPlug
。我不希望实现IPlug
的派生类有一个额外的事件只是为了避免名称冲突(如果我在基类或接口中更改了事件的名称就是这种情况)
有什么建议吗?
编辑:
问题不在于名称本身,而是我希望派生类以某种方式将其接口事件实现映射到基类中的现有事件 - 而不必在派生类中声明一个额外的事件(所有各种路由杂乱引导);毕竟,事件已经存在于基类中!我需要的是一种让界面知道的方法..
伪解决方案(仅用于说明)将能够使某些东西产生效果
Public Event MyBase.Changed Implements IPlug.Changed
在派生的OutputConnector
类中。
答案 0 :(得分:0)
This question指出了两种使接口实现明确的方法。
所以这取决于您打算如何使用IPlug.Changed
。如果您始终使用界面进行互动,则可以将其设为私有,即使需要Shadows
,也无法通过公共API看到它。
另一种方法是确定声明的新名称,例如OutputConnector.IPlugChanged
。
您选择的内容取决于您如何使用所有内容。
编辑:
您似乎希望这两个事件的功能相同。
在这种情况下,最好的办法是隐藏IPlug.Changed
实现,方法是使用不同的名称将其隐藏起来。
隐藏IPlug.Changed
后,请使用OnChange
受保护的方法(假设您创建了一个)将两者联系起来,在IPlugChanged
被触发时调用OnChange
。 / p>
如果您没有OnChange
受保护的方法,则可以附加执行上述调用的事件。请注意,如果您担心调用订单事件,则无法工作。
最后一个选项可能是使用Custom语法将对IPlug
的更改流式传输到基类。