C# Usingディレクティブと.NET 8の型エイリアス
[[academy-video-youtube({"vid": "GiVZzrL2EIM", "start_time": "0", "title": "C# 使用ディレクティブと型エイリアス .NET 8", "creator": "Tim Corey", "length": "9m 03s"})]]
C#のusingキーワードは複数の機能を持っており、その基本形と新しい機能の間のギャップはほとんどの開発者が認識する以上に広いです。名前空間のショートカットは初期から存在しており、静的クラスのインポートは.NET 6で導入され、.NET 8ではタプルを含む任意のタイプをカバーするためにエイリアス構文が拡張されました。 この3つの形式を知ることにより、ファイルの先頭で単一の読みやすい名前に繰り返しの型宣言を削減できます。
このガイドでは、.NET 8コンソールアプリケーションのusingディレクティブの各形式を、Tim Coreyの最新機能の解説に基づいて探ります。 私たちは、おなじみの名前空間ショートカットから新しい型エイリアス構文にビルドしていきます。
開始地点: 基本的な名前空間ディレクティブ
[0:35 - 1:35] セットアップは暗黙の使用をオフにして、すべてのディレクティブがコード内で明確に見えるようにすることから始まります。 最上部に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チャネルでビデオを完全に視聴してください。

