我的想法是,我想用函数调用的当前变量状态生成一个闭包,并订阅一个事件。引发事件后,然后删除闭包。这意味着它只是一次性订阅者,并且可以随时取消。另外,我希望订阅者始终订阅该事件并且不会被删除,知道如何实现这一点吗?或者还有其他方法可以实现这一目标吗?谢谢!public class A{ public event Action process; // publisher. void OnEventRaise() { process?.Invoke(); }}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 = () => { print(name); } a.process += showName; }}public class C{ // this is always subscribed to the event. void EventCallBack() { print("always subscribed"); } void subscribe(A a) { a.process += EventCallBack; }}
1 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
您当前的代码存在几个问题:
OnEventRaise
当您应该使用事件本身时,您正在订阅该事件(即)process
。使用 lambda初始化操作的语法
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)
{
// ....
}
}
- 1 回答
- 0 关注
- 104 浏览
添加回答
举报
0/150
提交
取消