Ale*_*kiy 0 .net c# generics inheritance interface
我有一个通用接口,看起来像这样:
public interface IObjectProvider<out T>
{
event Action<T> ValueOccured;
}
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个类,它实现这个接口两次,如下所示:
public class GlobalReceiver : IObjectProvider<Foo>, IObjectProvider<Bar>
{
public event Action<Foo> IObjectProvider<Foo>.ValueOccured;
public event Action<Bar> IObjectProvider<Bar>.ValueOccured;
}
Run Code Online (Sandbox Code Playgroud)
并且无法让它工作,因为对于这个编译器说我需要使用正确的语法,如果我进行非显式实现我(如预期的那样)会得到一个错误:
会员已经宣布.
我怎么能弄清楚这个问题?
您必须明确告诉如何在事件上实现add和remove,因为它是一个显式的接口实现:
public class GlobalReceiver : IObjectProvider<Foo>, IObjectProvider<Bar>
{
private event Action<Foo> ActionFoo;
event Action<Foo> IObjectProvider<Foo>.ValueOccured { add { ActionFoo += value; } remove { ActionFoo -= value; } }
private event Action<Bar> ActionBar;
event Action<Bar> IObjectProvider<Bar>.ValueOccured { add { ActionBar += value; } remove { ActionBar -= value; } }
}
Run Code Online (Sandbox Code Playgroud)
我添加了一个默认实现,您可以将其用于实际事件,以便从您的类中访问它们.
为什么?可能是因为您无法仅从类中的成员名称调用事件,因此调用事件处理程序将非常困难.
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |