usingステートメントは、C#1.0から使えるリソース管理の便利な仕組みですが
C#8.0からはusing 宣言として、ローカル変数のスコープを抜けたらDisposeする仕組みが追加されました
using ステートメントは、今日のリソース管理に効果的なツールですが、かなりの形式的な処理が必要です。 管理するリソースが多数あるメソッドでは、一連の using ステートメントでは構文的に行き詰まる可能性があります。 このような構文上の負担が大きいため、ほとんどのコーディング スタイル ガイドラインでは、このシナリオに対して中括弧に関する例外を明示的に規定しています。
using 宣言はここでの形式的な処理の多くを削除し、リソース管理ブロックを含む他の言語と同等の C# を取得します。 さらに、パターンベースの using を使用すると、開発者はここで参加できる型のセットを拡張できます。 多くの場合、using ステートメントで値を使用できるようにするためにのみ存在するラッパー型を作成する必要がなくなります。
これらの機能を組み合わせることで、開発者は using を適用できるシナリオを簡素化および拡張できます。 "パターン ベースの using" と "using 宣言"
using System;
public class Program
{
public static void Main(string[] args)
{
// ブロックで囲われている間がスコープでブロックを出るとDisposeが呼ばれる
using (var obj1 = new SampleCode())
{
Console.WriteLine("usingステートメントは、C#1.0から使える");
}
if (true)
{
// using宣言は、ローカル変数のスコープがusingのスコープになる(if文抜けたらDisposeする)
using var obj2 = new SampleCode();
Console.WriteLine("using宣言は、C#8.0から使える");
}
Console.WriteLine("範囲のわかりやすさでは、usingステートメント");
Console.WriteLine("ネストを嫌うのであれば、using宣言が良いかも?");
}
}
public class SampleCode : IDisposable
{
public void Dispose()
{
Console.WriteLine("Dispose!!");
}
}