using(...) ステートメントは、try{} finally {} のシンタックス シュガーです。
しかし、次のような using ステートメントがあるとします。
using (FileStream fs = File.Open(path))
{
}
ここで、このファイルを開くことで発生する可能性のある例外をキャッチしたいと考えています (環境によっては失敗する可能性があるという点で、これはかなりリスクの高いコードです)。コードがILにコンパイルされると、コードがJITされたときに繰り返しが削除されると思いますか?
ただし、ファイルを開くと発生する可能性のある例外をキャッチしたいと思います (したがって、using ステートメントのスコープ外で try-catch をラップする必要があります)。ブロックの中に。
これは、CLR がおそらく内部で行っていることに多くの繰り返しを追加しているように思えます。CLR は catch 句を追加しますか?
私の同僚は、using ステートメントが乱雑であると主張しました (しかし、これは、非常に迅速に変更する必要があり、コード ベースの他の部分にアクセスできなかったため、ハード コーディングしたために 1 行が少し長くなったためです)。この同僚は using ステートメントを使用していませんが、using ステートメントと try-finally/try-catch-finally の間に機能上の違いはありますか? 私は、WCF サービスで、finally を使用して値を返す (finally に関するもの) という、あまり知られていないコーナー ケースがあるケースを 1 つ見ました。解決策は、チェック ブロックを使用することでした。C# でこのようなものはありますか?
別の注意として、IDisposale を実装するすべての型は、管理されていないリソースの所有者ですか? 友人と話し合った結果、答えはノーでした。(私はまた、このフォーラムの使用セクションでいくつかのスレッドを読みました。いくつかの非常に優れた知識があります)。