作者:1小柱子8_814 | 来源:互联网 | 2023-05-19 18:55
我有一个通用接口,看起来像这样:
public interface IObjectProvider
{
event Action ValueOccured;
}
现在我想创建一个类,它实现这个接口两次,如下所示:
public class GlobalReceiver : IObjectProvider, IObjectProvider
{
public event Action IObjectProvider.ValueOccured;
public event Action IObjectProvider.ValueOccured;
}
并且无法让它工作,因为对于这个编译器说我需要使用正确的语法,如果我进行非显式实现我(如预期的那样)会得到一个错误:
会员已经宣布.
我怎么能弄清楚这个问题?
1> Patrick Hofm..:
您必须明确告诉如何在事件上实现add
和remove
,因为它是一个显式的接口实现:
public class GlobalReceiver : IObjectProvider, IObjectProvider
{
private event Action ActionFoo;
event Action IObjectProvider.ValueOccured { add { ActionFoo += value; } remove { ActionFoo -= value; } }
private event Action ActionBar;
event Action IObjectProvider.ValueOccured { add { ActionBar += value; } remove { ActionBar -= value; } }
}
我添加了一个默认实现,您可以将其用于实际事件,以便从您的类中访问它们.
为什么?可能是因为您无法仅从类中的成员名称调用事件,因此调用事件处理程序将非常困难.
您[也可能想要使用锁](http://stackoverflow.com/questions/2205711/should-i-lock-event).