2015/09/11(Fri) 07:39:16 編集(投稿者)
■No77096 (日曜プログラマー さん) に返信
> ただIDisposableはリソースを開放するためのインターフェイスだと理解していますが、
> 今回のサンプルや追々実装したい内容ではリソースの開放は行いません。
本来の意図・理想を重視するとその通りです。
それに反することに違和感を覚える方もいらっしゃるので、そのチーム次第かと思います。
> 変な質問ですが、この実装はアリですか?ナシですか?
> 理由やそういう結論に達する考え方も教えてほしいです。
> また、他に楽に書ける方法などあればご教授いただきたいです。
私は「あり」だと考えています。
try-finally を重ねていくとインデントが深くなる、実装ミスのリスクが増えるので、かんたんに書ける using スコープを使うテクニックの方を推しています。
実際、Rx(Reactive Extentions) には「Dispose が呼ばれたら任意の Action を実行する」オブジェクトを作ることができる、Disposable.Create というメソッドもあるので、
そういった文化もあると考えています。
https://msdn.microsoft.com/en-us/library/system.reactive.disposables.disposable.create
あとは、BeginUpdate, EndUpdate, Try-Finally を書いたユーティリティメソッドを用意しておいて、そいつに更新用のアクションを渡すことでしょうか。
C# で申し訳ないですが、イメージとして。
void InUpdateAction(ComboBox combo, Action action)
{
combo.BeginUpdate();
try
{
action();
}
finally
{
combo.EndUpdate();
}
}
// 例
InUpdateAction(_comboTest, () => { _comboTest.Items.Clear(); /* BeginUpdate と EndUpdate の間にやりたい処理を詰める */ });