【发布时间】:2015-04-29 09:07:13
【问题描述】:
我正在寻找合适且优雅的方式来创建具有类型化回调的中介者/订阅者架构。
假设我有一个带有“事件”的类,即代表:
public class E
{
public delegate void SomethingHappened (float a, int b);
public delegate void ProgressFinished (int[] c);
}
现在我想创建一个 Mediator 类,它将向这些委托注册回调并使用提供的参数分派回调:
public class Mediator
{
public static void Register ( ???, Action callback)
{
// supplied delegate += callback
}
public static void Dispatch ( ???, params object[] list)
{
// executing supplied delegate with params: delegate(list)
}
}
所以我可以通过以下方式使用它:
// Class A:
Mediator.Register (E.SomethingHappened, OnSomethingHappened);
private void OnSomethingHappened (float a, int b)
{
//..........
}
// Class B:
Mediator.Dispatch (E.SomethingHappened, 0.1f, 'qwe');
现在的问题是我不能将委托作为参数传递给 Register 或 Dispatch。我该如何解决这个问题?
【问题讨论】:
-
我认为您误解了代表。一个委托是一个回调(或可以用作它) - 你不注册一个回调与一个委托。也许您实际上是在寻找活动?
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
@JonSkeet:我相信OP想根据其委托类型注册一个具体的回调方法,但不知道如何将委托类型传递给方法
-
@JonSkeet 是的,Groo 是对的,我正是想要那个
-
在这种情况下,“提供的委托 += 回调”的注释特别令人困惑......就像您尝试将
OnSomethingHappened方法组转换为Action的示例一样, 当Action没有任何参数时...
标签: c# events delegates params mediator