事件必须是委托类型?

O.O*_*O.O 2 c#

对声明和使用事件以及收到错误不太熟悉,

事件必须是委托类型

基本上希望IMyInterface作为依赖项传递给另一个类,该类可以订阅接收MyClassEvent事件和事件数据MyClass.

public interface IMyInterface
{
   event MyClass MyClassEvent;
}

public class Implementation: IMyInterface
{
     event MyClass MyClassEvent;
     public void OnSomethingHappened
     {
         MyClassEvent?.Invoke(); // pass MyClass to subscribers
     }
}

public class AnotherClass(IMyInterface ...)
{
    OnMyClassEvent(MyClass args)
    {
       // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

Tre*_*ley 6

您需要正确声明事件并定义事件参数:

public class MyClassEventArgs : EventArgs { }

public interface IMyInterface
{
    event EventHandler<MyClassEventArgs> MyClassEvent;
}

public class Implementation : IMyInterface
{
    public event EventHandler<MyClassEventArgs> MyClassEvent;

    public void OnSomethingHappened()
    {
        MyClassEvent?.Invoke(this, new MyClassEventArgs());
    }
}
Run Code Online (Sandbox Code Playgroud)

并订阅它:

var implementation = new Implementation();
implementation.MyClassEvent += MyClassEvent;

private void MyClassEvent(object sender, MyClassEventArgs e) { ... }
Run Code Online (Sandbox Code Playgroud)

  • .NET 2中引入了EventHandler &lt;T&gt;,这是您必须声明自己的委托之前的一种方式 (2认同)