如何订阅作为参数传递给函数的事件



我正试图通过函数向事件添加侦听器。

event Action ExampleEvent;
void AddListener(Action emitter, Action receiver)
{
     emitter += receiver;
}

然后在某个地方我这样称呼它:

AddListener(ExampleEvent, () => Console.WriteLine("Example event received"));
ExampleEvent?.Invoke();

但没有产出。我看不出少了什么。

您应该像这样使用ref关键字。

event Action ExampleEvent;
void AddListener(ref Action emitter, Action receiver)
{
     emitter += receiver;
}
// Usage
AddListener(ref ExampleEvent, () => Console.WriteLine("Example event received"));
ExampleEvent?.Invoke();

因为Action实例就像指向函数的指针(或指针列表(,它们将作为参数按值传递。因此,为了通过引用传递它们,您需要使用ref关键字。

最新更新