做基于组件的开发,我发现自己相当频繁这样做:在设置属性时,什么是最优雅的交换事件的方式?
public class SomeClass
{
SomeOtherClass foo;
public SomeOtherClass Foo
{
get { return foo; }
set {
if (value != foo) {
if (value != null) {
// subscribe to some events
value.SomeEvent += foo_SomeEvent;
}
if (foo != null) {
// unsubscribe from subscribed events
foo.SomeEvent -= foo_SomeEvent;
}
foo = value;
}
}
}
void foo_SomeEvent(object sender, EventArgs e)
{
// do stuff
}
}
有没有更优雅的方式做这个活动“换出”?
(当然,就可以避免整个问题,如果foo
是不可改变的,但我不会得到任何可视化设计器的支持。)
有时我发现自己在课堂上多次复制了这段代码,并且开始看起来对于这么简单的操作来说很麻烦。嗯... – 2009-10-05 19:35:33
是的,这是我错过C++宏的情况... – 2009-10-05 19:41:15
编辑为了向您展示使用lambdas的更短版本 – 2009-10-05 19:41:51