这个想法是我想用函数调用的当前变量状态生成一个闭包,并订阅一个事件。引发事件后,然后删除闭包。这意味着它只是一次性订阅者,可以随时取消。
此外,我希望订户始终订阅该事件并且不被删除,任何想法如何实现?还是有其他方法可以做到这一点?谢谢!
{{1}}
答案 0 :(得分:1)
您当前的代码有几个问题:
OnEventRaise
)时,您正在使用process
订阅事件。showName
的语法不正确。您需要使用Action showName = () => { // ... };
。最后,要取消订阅该事件,您可以在动作主体内简单地使用a.process -+ showName;
,但是您需要首先对其进行初始化,以防止编译器抱怨。
为您的B
类尝试类似的操作:
public class B
{
// subscribe the closure and delete it once it is invoked, can unsubscribe at anytime.
void subscribe(A a)
{
string name = "one shot subscriber";
Action showName = null;
showName = () =>
{
print(name);
a.process -= showName;
};
a.process += showName;
}
private void print(string s)
{
// ....
}
}