多次实现事件的通用接口

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)

并且无法让它工作,因为对于这个编译器说我需要使用正确的语法,如果我进行非显式实现我(如预期的那样)会得到一个错误:

会员已经宣布.

我怎么能弄清楚这个问题?

Pat*_*man 7

您必须明确告诉如何在事件上实现addremove,因为它是一个显式的接口实现:

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)

我添加了一个默认实现,您可以将其用于实际事件,以便从您的类中访问它们.

为什么?可能是因为您无法仅从类中的成员名称调用事件,因此调用事件处理程序将非常困难.

  • 您[也可能想要使用锁](http://stackoverflow.com/questions/2205711/should-i-lock-event). (2认同)