如何与代表订阅事件

时间:2018-12-22 01:05:13

标签: c# unity3d events delegates anonymous-methods

我想订阅一个事件,以便在事件触发时可以执行委托或匿名函数。

使用方法订阅事件很容易,我可以键入方法名称,这很好:

UnityEngine.UI.Toggle tgl;
tgl.onValueChanged += myMethod;

但是我不能使用相同的语法订阅委托。这将不起作用:

tgl.onValueChanged += delegate{ Debug.Log("Bang!"); };

我研究了此Q&A,这表明我尝试了以下方法,但这种方法也不起作用:

tgl.onValueChanged += (object sender, EventArgs e) => { Debug.Log("Bang!"); };

我该如何做?

1 个答案:

答案 0 :(得分:0)

您需要先查看onValueChanged是什么类型,然后才能尝试订阅它。这是它的声明,取自here

public UI.Toggle.ToggleEvent onValueChanged;

它的类型是ToggleEvent,它是一个类,不是事件也不是委托。因此,不能在其上使用+=运算符。

您应该致电AddListener,就像例子中那样:

tgl.onValueChanged.AddListener(delegate { ... })