読者です 読者をやめる 読者になる 読者になる

usingステートメント

C#

これまで、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