【发布时间】:2015-11-12 19:14:05
【问题描述】:
在 C# 中,闭包如何引用自身?用例是在单次发生后(或在某些情况下)自动取消订阅事件。我知道你可以创建一个委托的实例,但我真的很想把它作为一个闭包来维护上下文。例如:
var someVar = new FooBar();
textBox1.TextChanged += (s, e) => {
doSomething(someVar);
// Unsubscribe from further events
// textBox1.TextChanged -= myself?
// If I don't unsubscribe, I'm needlessly keeping reference
// to someVar, and I don't intend to keep triggering this code
// upon further events.
};
【问题讨论】:
-
我相信你必须把
doSomething放在一个实际的事件中,因为你不能用这个删除订阅;textBox1.TextChanged = null。所以你需要一个实际的方法/事件来删除。