2010-07-23 20 views

回答

4

如何接口声明前缀上的事件接口名称的事件?我不确定这是合法的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... 
     } 
    } 
} 

...还是我误解在哪里你继承的事件?你的类是从一个抽象基类派生出来的,后者又实现了一个接口(它声明了这个事件)?这可能是你的意思,但在问题中并不清楚。

+0

你说得对,接口不与接口的名称声明它的前缀,我们只是宣称这种方式,当我们宣布实施。将更新OP。 – 2010-07-23 17:42:58

2
private EventHandler onChanged; 

event EventHandler IFoo.OnChanged 
{ 
    add 
    { 
     onChanged += value; 
    } 
    remove 
    { 
     onChanged -= value; 
    } 
} 
0

我建议您更改事件的名称以符合常见的事件命名标准。在这种情况下改变。 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); 
     } 
    } 
+0

感谢您的反馈,我认为(元)它比回答更适合作为评论。将更新OP。 – 2011-11-18 23:38:42