名前空間とは
プログラムを構成する一番外側の部分を指し、プログラムがどこに属しているかを示しています。
フォルダのような役割をイメージすれば分かりやすいかもしれません。
以下の例にあるようにProgramクラスはConsoleApp1という名前空間に属しています。
このようにして名前空間という単位でプログラムをまとめることができます。
// Program.cs
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var a = new Program2();
}
}
}
usingによる名前空間の参照
usingから名前空間を参照することで別の名前空間に属しているプログラムを使用することができます。
これをusingディレクティブと呼びます。
using ConsoleApp2
とすることでConsoleApp2(Program2.cs)に属しているプログラムを使用できます。
名前空間を参照することでProgram2クラスをインスタンス化して、Program2クラスのメソッドを使用したりすることが可能になります。
逆にいうと、using ConsoleApp2
の記述が無ければコンパイルエラーとなりProgram2クラスのインスタンスは作成できません。
// Program.cs
using ConsoleApp2;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var a = new Program2();
a.Sample();
}
}
}
// Program2.cs
namespace ConsoleApp2
{
class Program2
{
public void Sample()
{
}
}
}
補足:using Systemについて
using System
という記述をプログラムの冒頭で目にしたことは無いでしょうか?
これは何ら特別な書き方では無く、MicroSoftが用意してくれているSystemという名前空間に属しているプログラムを使用しますという宣言にすぎません。
Console.WriteLine()
をよく使うと思いますが、これは名前空間Systemの中にあるConsoleクラスで定義されているWriteLine
メソッドを使用しているだけです。
あくまでもイメージですが大体こんな感じです。
namespace System
{
class Console
{
public void WriteLine()
{
}
}
}
System 名前空間
一般的に使用される値型と参照データ型、イベントとイベント ハンドラー、インターフェイス、属性、および処理例外を定義する基底クラスが含まれています。
コメント