http://blogs.wankuma.com/rti/archive/2008/11/18/161615.aspx
イベントの連鎖発生のコントロール
の続きです。
フラグ処理が共通化できることに気づいて、最終的に以下のようになりました。
var flag = true;
Action<Action> f = x => {
if (!flag) return;
flag = false;
x();
flag = true;
};
var a = new List<CheckBox> { checkBox2, checkBox3, checkBox4 };
a.ForEach(x => x.CheckedChanged += (s, e) => f(() => checkBox1.Checked = a.All(p => p.Checked)));
checkBox1.CheckedChanged += (s, e) => f(() => a.ForEach(x => x.Checked = checkBox1.Checked));
これは
何ていう難読化ですか?w
匿名メソッドは便利だけど、匿名であるが故に実装が何をしているのかがわかりにくい点に注意が必要です。
「振る舞い」を表す名前は、ある程度は必要ということですね。