これまで、Disposeによるリソース解放は、finallyで手動で行うような形になっていた・・・。
usingステートメントを使うと、IDisposableインターフェイス実装オブジェクトについては、finallyがなくても自動でリソース解放してくれる・・・。
CustomReader.csで、
ReadAllのtry-catch-finallyを外してみる・・・。
その代わり、MainClass.csでは、
usingの括弧の中に、CustomReaderの生成処理を書いている・・・。
そして、次のブロックの中で、ReadAllなどの読み込み処理をしている・・・。
usingブロックを抜けると、失敗しようが成功しようが、括弧の中で生成したオブジェクトのリソース解放処理Disposeは勝手に呼ばれる・・・。
ただし、usingとtry-catchは独立しているので、tryでの例外が起きそうな処理、発生した時のcatchでの例外処理は必要・・・。
なので、このようになっている・・・。
test1.txtだけの場合、
Error: ファイル 'C:\Project\Cloud\github.com\Sample\cs\usingStatement\usingState ment\src\usingStatement\usingStatement\bin\Debug\test2.txt' が見つかりませんでし た。 Dispose sr1 closed! 続行するには何かキーを押してください . . .
finallyがなくてもDisposeが呼ばれている・・・。
test2.txtもあった場合は、
cr.text1 = ABCDE cr.text2 = XYZ Dispose sr2 closed! sr1 closed! 続行するには何かキーを押してください . . .
この場合もDisposeが呼ばれている・・・。
実は、StreamReaderなどのリソース生成解放処理がいるようなクラスはだいたいIDisposableが実装されている・・・。
なので、実際にはusingを使えば勝手にDisposeの解放処理が呼ばれるので、Disposeの処理を実装することはあまりないともいえる・・・。
Sample/cs/usingStatement/usingStatement/src/usingStatement at master · bg1bgst333/Sample · GitHub