C#のパッケージと名前空間(namespace)の基本を解説
Javaにおける「パッケージ」に相当する機能として、C#言語には「名前空間(namespace)」が用意されています。本記事では、両者の役割の違いと、C#における名前空間の基本的な使い方をサンプルコード付きで解説します。
Javaのパッケージとは
Javaのパッケージは、主に以下の目的で使用される仕組みです。
- 名前の衝突(ネーミングコンフリクト)を防ぐ
- クラスやメンバーへのアクセス制御を行う
- クラス、インターフェース、列挙型、アノテーションの検索・配置・利用を容易にする
C#の名前空間(namespace)とは
名前空間は、ある一連の名前を別の一連の名前から切り離して管理するための仕組みです。ある名前空間内で宣言されたクラス名は、別の名前空間で宣言された同名のクラスと衝突しないため、大規模なプロジェクトでも安全にコードを整理できます。
名前空間の定義は、キーワード namespace に続けて名前空間名を記述することで始まります。以下に、C#での名前空間の基本的な使い方を示します。
コード例
using System;
namespace first_space {
class namespace_cl {
public void func() {
Console.WriteLine("Inside first_space");
}
}
}
namespace second_space {
class namespace_cl {
public void func() {
Console.WriteLine("Inside second_space");
}
}
}
class TestClass {
static void Main(string[] args) {
first_space.namespace_cl fc = new first_space.namespace_cl();
second_space.namespace_cl sc = new second_space.namespace_cl();
fc.func();
sc.func();
Console.ReadKey();
}
}
この例では、first_space と second_space という2つの異なる名前空間の中に、同じ名前のクラス namespace_cl がそれぞれ定義されています。しかし、名前空間によって名前が分離されているため、両者は衝突することなく共存できます。
プログラムを実行すると、次のような出力が得られます。
Inside first_space Inside second_space
補足:usingディレクティブでコードを簡潔にする
毎回 first_space.namespace_cl のように完全修飾名を記述するのは冗長です。using ディレクティブを使用すると、名前空間の指定を省略でき、コードをより簡潔に記述できます。
using first_space; namespace_cl fc = new namespace_cl(); // 完全修飾名が不要になる
このように、C#の名前空間はJavaのパッケージと同様に、コードの整理・名前の衝突防止・可読性の向上に欠かせない重要な概念です。
-
Python 3で名前空間パッケージ(Namespace Package)を作成する方法
名前空間パッケージとは?Pythonの「名前空間パッケージ(namespace package)」は、1つのパッケージのコードを複数のプロジェクトやディレクトリに分散配置できる仕組みです。関連するライブラリ群を、それぞれ独立した配布物としてリリースしたい場合に特に便利です。例えば、PYTHONPATH 上に Package-1 と Package-2 というディレクトリがあり、次のような構成になっているとします。Package-1/namespace/__init__.py Package-1/namespace/module1/__init__.py Package-2/namespace/
-
Pythonの名前空間パッケージとは?使い方と開発手法をわかりやすく解説
Python名前空間パッケージ(Namespace Package)とは Pythonにおける名前空間パッケージ(namespace package)は、1つのパッケージのコードを複数のプロジェクトに分散して配置できる仕組みです。関連するライブラリを個別の配布物としてリリースしたい場合などに非常に便利です。 例えば、PYTHONPATH上に「Package-1」と「Package-2」というディレクトリがあり、以下のような構成になっているとします。 Package-1/namespace/__init__.py Package-1/namespace/module1/__init__.py