RAIIをC#でやるには?
RAIIとは?
Resource Acquisition Is Initializationの略で、直訳すると"リソースの取得は初期時に"となります。
これはC++やD言語で一般的なテクニックでリソースの取得と破棄を、変数のコンストラクタとデストラクタに関連付けて行うものです。
例えば、下記のように書いておくとスコープを抜けた時に自動でファイルをクローズしてくれるのでクローズし忘れを防いでくれます。
class MyFileStream { public: MyFileStream( str filenname ) { Open( filename ); } ~MyFileStream() { Close(); } ... //OpenとかCloseの実装 };
C#ではどうする?
しかし、このテクニックはC#では使えません。その代わりになるのがIDisposerインターフェースとusing句です。
class MyFileStream : IDisposer{ public MyFileStream( str filenname ) { Open( filename ); } public void Dispose() { Close(); } ...//OpenとかCloseの実装 };
と書いておき、使用の際には、
using( MyFileStream mfs = new MyFileStream( "hoge.txt" ) ) { //処理 }
と書いておくことでRAIIと同様のことができます。ちょっと使いづらい。