名前空間はコードを論理的なグループに整理し、名前の衝突を防ぎます(型のフォルダーのような役割)。using ディレクティブは名前空間をインポートして、短い名前でその型を参照できるようにします。これらはC#コードを構造化し、広大な.NETライブラリへのアクセスを実現します。
名前空間の宣言
;
{ }
{
{ }
}
名前空間は関連する型を名前(MyApp.Services.UserService)の下にグループ化し、異なる名前空間に存在する同名のクラス間の衝突を防ぎます。ファイルスコープ名前空間(C# 10)ネストを削減します。
using System; // import → use Console instead of System.Console
using System.Collections.Generic; // → List<T>, Dictionary<K,V>
using System.Linq; // → LINQ extension methods
using MyApp.Services; // your own namespaces
Console.WriteLine("hi"); // short name works thanks to `using System;`
var list = new List<int>(); // thanks to the Generic using
ファイルの先頭の using は名前空間をインポートし、完全修飾名の代わりに短い名前でその型を使用できるようにします。必要な.NETライブラリはこの方法でインポートします。
using Project = MyApp.Models.Project; // ALIAS — resolve a name conflict or shorten
// GLOBAL using (C# 10) — apply to the ENTIRE project, declared once
global using System;
global using System.Collections.Generic;
// → no need to repeat common usings in every file (often auto-generated)
グローバル using(C# 10)はプロジェクト全体に対して一度だけインポートを宣言します — モダン.NETは一般的なもの(ImplicitUsings)を自動的に含めるため、using System; をめったに書く必要がなくなります。
using var file = File.OpenText("x.txt"); // using STATEMENT — auto-disposes (different feature!)
名前空間と using ディレクティブはC#コードを整理し.NETエコシステムにアクセスするための基本であるため、それらを理解することは毎日必要な知識です。名前空間は型を論理的なグループに整理し(フォルダー構造を反映)、名前の衝突を防ぎます — 名前空間がなければ、クラスは互いに、および広大な.NETライブラリとサードパーティパッケージと競合するでしょう。using ディレクティブはそのライブラリへのアクセス方法です:名前空間をインポートして、完全修飾名ではなく短い名前(Console、List<T>、LINQメソッド)でその型を使用できるようにします — すべてのC#ファイルは using に依存してフレームワークの機能にアクセスします。
名前空間を宣言する方法(モダンなファイルスコープ構文を含む)、using でインポートする方法、衝突を解決するためにエイリアスを使用する方法、およびグローバル using(C# 10、プロジェクト全体に対して一般的なインポートを一度だけ宣言する — 今では ImplicitUsings を通じて自動生成されることが多いため、ボイラープレート using をめったに書く必要がない)を活用する方法を知ることは、プロジェクトを構造化し、フレームワークを使用するために必要です。
名前空間と using を理解する — コード整理、衝突防止、.NETライブラリへのアクセス、およびボイラープレートを削減するモダンなグローバル/暗黙的な using — はすべてのC#開発の基礎です。なぜなら、すべてのプログラムはコードを名前空間に整理し、using を通じて機能にアクセスするからです。(自動リソース破棄のための異なる機能である using ステートメントと区別する価値があります。)