c# - 从函数返回事件

标签 c# events

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

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

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

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"

容器类如下所示:

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 */ }
  }
}

我如何定义 EventForKey 才能达到我的预期?

最佳答案

What is the syntax to return an event from a function?

你不能,很容易。事件 - 就像属性一样 - 并不是真正的一流“对象”;他们是一个类(class)的成员。您在这里实际上没有类成员 - 您只是试图将委托(delegate)保留在字典中。

可以创建您自己的“类事件”容器,但最好考虑其他设计,例如

c.Subscribe("a", SomeFunction);
c.OnEventForKey("a");

您可能想看看 EventHandlerList寻找灵感。

关于c# - 从函数返回事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10257259/

相关文章:

c# - 如何将按钮添加到 TabPage 的页眉?

c# - 在 C# 中创建 Azure Blob SAS key 时出现 "Inadequate resource type access"

c# - 有没有办法知道FileSystemwatcher还剩下多少缓冲区?

c# - Framework.Triggers 和 Style.Triggers 之间的区别?

events - 重复 "Events"(日历)

c# - 基于另一个一维数组的 3 维数组快速排序

c# - 如何在没有返回值的情况下从 Linq 语句调用函数?

c# - 无法读取 Metro 应用程序中的文本文件?

java - 调用禁用的 JButton 的 actionlistener

.net - UserControl 句柄多久重新创建一次?