我的基本接口IFoo的声明如何在C#中实现抽象事件或接口方法事件?
event EventHandler Changed
,当我做“实现接口”我得到一些蹩脚的样板代码,但是我怎么提供一个体面的默认实现?
add { throw new NotImplementedException(); }
remove { throw new NotImplementedException(); }
我的基本接口IFoo的声明如何在C#中实现抽象事件或接口方法事件?
event EventHandler Changed
,当我做“实现接口”我得到一些蹩脚的样板代码,但是我怎么提供一个体面的默认实现?
add { throw new NotImplementedException(); }
remove { throw new NotImplementedException(); }
如何接口声明前缀上的事件接口名称的事件?我不确定这是合法的C#。
如果没有“IFoo”就可以离开。前缀,只需在你的类中声明该事件并让编译器为你创建默认的添加/删除操作符。所有你应该担心的是何时触发事件:
interface IFoo
{
event EventHandler OnChanged;
}
class MyClass : IFoo
{
public event EventHandler OnChanged;
private FireOnChanged()
{
EventHandler handler = this.OnChanged;
if (handler != null)
{
handler(this, EventArgs.Empty); // with appropriate args, of course...
}
}
}
...还是我误解在哪里你继承的事件?你的类是从一个抽象基类派生出来的,后者又实现了一个接口(它声明了这个事件)?这可能是你的意思,但在问题中并不清楚。
private EventHandler onChanged;
event EventHandler IFoo.OnChanged
{
add
{
onChanged += value;
}
remove
{
onChanged -= value;
}
}
我建议您更改事件的名称以符合常见的事件命名标准。在这种情况下改变。 Link to previous post
private System.EventHandler _Changed;
private readonly object _EventLock = new object();
public event System.EventHandler Changed {
add {
lock (_EventLock) {
_Changed += value;
}
}
remove {
lock (_EventLock) {
_Changed -= value;
}
}
}
protected virtual void OnChanged(System.EventArgs args) {
System.EventHandler handler = _Changed;
if (handler != null) {
handler(this, args);
}
}
感谢您的反馈,我认为(元)它比回答更适合作为评论。将更新OP。 – 2011-11-18 23:38:42
你说得对,接口不与接口的名称声明它的前缀,我们只是宣称这种方式,当我们宣布实施。将更新OP。 – 2010-07-23 17:42:58