メモ C#ではC++式のRAIIが使えない
RAIIとは、メモリ開放やファイルCloseやポートのCloseなど、書き忘れるとヤバイcodeを、スコープから抜ける時に自動的にやってくれる仕組み。これがC#では無くなっている。なぜ??!
代わりにIDisposableインターフェイスなclassを作って、using文を使う。ネストが増えるのが気に入らない・・・・
以下は、ボタンが押されて、ある処理を行っている最中に、もう一度ボタンが押されてしまうのを防ぐ為に、ボタンを一時的に無効にしておこう、という場合の例
//実行中はボタンをEnabled = falseし、終われば(スコープを抜ければ)自動的にenableされる class ButtonDisabler : IDisposable { Button theButton; public ButtonDisabler(Button b) { theButton = b; theButton.Enabled = false; } void IDisposable.Dispose() { theButton.Enabled = true; } } private void buttonSend_Click(object sender, EventArgs e) { //処理が終わると勝手にボタンが有効になる using (ButtonDisabler btn = new ButtonDisabler(buttonSend)) { /*何か処理*/ } }