从函数返回事件

Mic*_*son 5 c# events

从函数返回事件的语法是什么?(不要调用事件,返回它以便它可以绑定到函数).

我有一个容器类,其中包含一个字典,其中每个成员都有一个事件.

目的是能够写出这样的东西:

Container c = new Container();
c.CreateEventForKey("a");             // Create the member in the dictionary
c.EventForKey("a") += some_function;  // Bind some_function to the event in the "a" member
c.OnEventForKey("a","b");             // Calls some_function with argument "b"
Run Code Online (Sandbox Code Playgroud)

Container类看起来像这样:

public class Container {

  public class Member {
     public event Action<string> AnEvent;
     public void OnEvent( string v ) { if(AnEvent!=null) { AnEvent(v); } }
  }

  protected Dictionary<string,Member> members;

  // This seems to work OK.
  public void OnEventForKey(string k, string v) {
    if ( members.ContainsKey(k) ) { members[k].OnEvent(v); }
    else { /* report error */ }
  }

  // Can't get this to compile.
  public event Action<string> EventForKey(string k ) {
    if ( members.ContainsKey(k) ) { return members[k].AnEvent; }
    else { /* report error */ }
  }
}
Run Code Online (Sandbox Code Playgroud)

EventForKey该怎么定义才能达到我的预期呢?

Jon*_*eet 8

从函数返回事件的语法是什么?

你不能,轻松.事件 - 就像属性 - 并不是真正的第一类"对象"; 他们是一个班级的成员.你不是真的一类成员在这里-你想只保留代表在字典中.

可以创建自己的"类似事件"的容器,但最好考虑替代设计,例如

c.Subscribe("a", SomeFunction);
c.OnEventForKey("a");
Run Code Online (Sandbox Code Playgroud)

你可能想要寻找EventHandlerList灵感.