做基於組件的開發,我發現自己相當頻繁這樣做:在設置屬性時,什麼是最優雅的交換事件的方式?
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