C# Usingディレクティブと.NET 8の型エイリアス
C#のusingキーワードは複数の機能を持ち、その基本形と新しい機能の間のギャップは多くの開発者が認識している以上に広いです。名前空間のショートカットは最初から存在しており、静的クラスのインポートは.NET 6で登場し、.NET 8ではタプルを含むあらゆる型を対象にエイリアス構文が拡張されました。 この3つの形式を知ることにより、ファイルの先頭で単一の読みやすい名前に繰り返しの型宣言を削減できます。
このガイドは、Tim Coreyの最新機能のウォークスルーに基づいて、.NET 8コンソールアプリケーションのusingディレクティブの各形を探ります。 私たちは、おなじみの名前空間ショートカットから新しい型エイリアス構文にビルドしていきます。
開始地点: 基本的な名前空間ディレクティブ
[0:35 - 1:35] セットアップは暗黙の使用をオフにして、すべてのディレクティブがコード内で明確に見えるようにすることから始まります。 最上部にConsole.WriteLineを呼び出すには完全修飾名が必要です: System.Console.WriteLine。 単一のディレクティブを追加することでそれを解決します。
using System;using System;その1行で、System内のすべての型が、その短い名前で利用可能になります。 このディレクティブはライブラリのインポートではありません; 新しいコードは引き込まれません。 これは名前空間のショートカットであり、コンパイラが資格のない型名に遭遇したときにどこを見るかを指示します。
静的使用: クラス名をスキップ
[2:19 - 2:45] using static形式は、名前空間ではなく特定の静的クラスを対象とします。 System.Consoleに向けることで、そのクラスのすべての静的メンバーがクラスプレフィックスなしで利用可能になります:
using static System.Console;
WriteLine("Hello, world!");using static System.Console;
WriteLine("Hello, world!");WriteLineを直接呼び出します。 この形式は、.NET 6で登場し、ファイルが同じ静的クラスを何度も呼び出すときに最も役立ちます。 繰り返し発生するクラス名を排除することで、各呼び出しサイトでの視覚的ノイズが減ります。
型エイリアス: 任意の型の命名
[3:41 - 6:40] .NET 8では、usingが任意の型に短い名前を割り当てることができるようにエイリアス構文が拡張されました。 動機付けの例として名前付きタプルがあります。 タプルは、フルクラス定義なしで、メソッドが複数の関連する値を返す必要があるときの一般的な戻り値型ですが、同じタプル型をファイル内で複数回宣言することは多くの繰り返しを生じさせます:
// Without an alias, each declaration repeats the full tuple type
(string FirstName, string LastName) GetUser() { ... }
(string FirstName, string LastName) person = GetUser();// Without an alias, each declaration repeats the full tuple type
(string FirstName, string LastName) GetUser() { ... }
(string FirstName, string LastName) person = GetUser();型エイリアスはそれをファイルの上部での単一の宣言に縮小します:
using Person = (string FirstName, string LastName);using Person = (string FirstName, string LastName);その時点からファイル内で、Personが完全なタプル定義を代用します:
Person GetUser() { ... }
Person person = GetUser();Person GetUser() { ... }
Person person = GetUser();エイリアスはそれが宣言されているファイル内にのみ存在します。 それはアプリケーション全体に伝播しません。 プロジェクト全体で型を利用する必要がある場合は、レコードまたはクラスが適切な選択肢です。
エイリアス vs. レコードまたはクラス
[5:32 - 6:23] よくある質問: Personがレコードのように見える場合、なぜ単にレコードを宣言しないのか? その答えはスコープと重みの問題です。 レコードまたはクラスは、プロジェクト全体に存在し、独自のファイルを持つ名前付き型であり、コードベースが進化するにつれて維持が必要です。 タプルエイリアスはファイルローカルの便利さです。 2フィールドのタプルを1つのクラスファイル内で2または3回使用するとき、完全な型定義を作成することは、エイリアスが回避するメンテナンスの負担を追加します。 .NET チームの意図は、生のタプルと完全なクラスの間の二項選択を強制するのではなく、オプションの差異を提供することです。
結論
3 つのusing形式は、異なるニーズをカバーします。 基本的な名前空間ディレクティブはファイル全体の修飾型名を短縮し、using staticは静的メンバー呼び出しからクラスプレフィックスを取り除きます。 .NET 8 の型エイリアスは単一ファイルにスコープを割り当て、タプルを含む任意の型に読みやすい名前を割り当てます。各形式はコードの基本動作を変更することなく繰り返しを減らします。
作業中 for .NET 8プロジェクトでの全3形式のライブデモンストレーションについては、Tim CoreyのYouTubeチャネルでビデオを完全に視聴してください。

