完全修飾名とは、クラスのデータやメソッドを使うときに、〈 名前空間.クラス名.メソッド名 〉の形式で呼び出したものです。
名前空間.クラス名.メソッド名
例えば、Console.Write()メソッドの完全修飾名は以下になります。
System.Console.Write(); // System名前空間.Consoleクラス.Write()メソッド;
本来クラスのデータやメソッドを使うときは、このように完全修飾名を書かないと呼び出すことができません。
class Test
{
static void Main()
{
string kago = "イチゴ";
Console.Write(kago); // System.がないためエラー
}
}
で先頭にSystem名前空間がついていないため〈 現在のコンソールに ‘Console’という名前は存在しません 〉というエラーが表示されます。
## 完全修飾名を書かないで呼び出す例文
しかし、通常は以下のように書いて呼び出すことが多いと思います。
using System;
class Test
{
static void Main()
{
string kago = "イチゴ";
Console.Write(kago); // Systemと書かなくても呼び出せる
}
}
のusingディレクティブでConsoleクラスが所属するSystem名前空間を宣言しています。
そのためでは、Consoleの前にSystem.と書かなくても呼び出せます。
## 完全修飾名で呼び出す例文
Console.Write()メソッドを完全修飾名で呼び出した場合、以下のようになります。
// using System を省略
class Test
{
static void Main()
{
string kago = "イチゴ";
System.Console.Write(kago); // 完全修飾名で呼び出し
}
}
で〈 System名前空間.Consoleクラス.Write()メソッド 〉 の完全修飾名で書いているため、でSystem名前空間の宣言をしなくても呼び出せます。
## 完全修飾名を使わない理由
完全修飾名を使うとデータやメソッドを呼び出すときに毎回名前空間を書かないといけません。
2つ、3つならいいですが、100回メソッドを呼び出した場合100回名前空間を書かないといけないと、大変ですし冗長になって読みにくいコードになってしまいます。
// 名前空間を省略しないで書いた場合
System.Console.WriteLine("文字列1");
System.Console.WriteLine("文字列2");
…
// 名前空間を省略して書いた場合
Console.WriteLine("文字列1");
Console.WriteLine("文字列2");
…
そのため、基本的には完全修飾名を使うことは少ないです。
## 名前空間を宣言したときでも、完全修飾名で呼び出せる
usingディレクティブで名前空間の宣言をしたときでも、完全修飾名でデータやメソッドを呼び出すことができます。
using System;
class Test
{
static void Main()
{
string kago = "イチゴ";
Console.Write(kago); // 名前空間を省略して呼び出し
System.Console.Write(kago); // 完全修飾名で呼び出し
}
}
でusingディレクティブでSystem名前空間の宣言をしていてもで完全修飾名でConsole.Write()メソッドを呼び出しています。