第11回 C#入門 C#プログラミングで名前空間を扱ってみよう!
今回はこれまで、説明を後にしてきた「名前空間について説明致します。」
今回もC#を使ってヴィジュアルスタジオで説明致します。
皆さんもすぐに経験すると思いますが、大きなプロジェクトに携わりますと、複数の人でコーディングをするためたくさんのクラスが作成されます。ここで、同じ名前のクラスを定義してしまうことがありますしかし、クラスを利用するときに同じ名前のクラスを定義してしまいますと。当然プログラムは誤作動になってしまいます。クラスの名前が同じでもクラス内の処理は必ずしも一緒とは限りません、ですのでこのままプログラムを実行してしまいますとコンピューターさんはどちらかのクラスの処理を行ってしまう可能性があり、誤作動を起こしてしまう可能性があります。それを防ぐために名前空間というものがあります。
それでは実際にプログラムを見ていきましょう。
using System;
namespace Program
{
class Sample
{
static void Main(string[]args)
{
Console.WriteLine("welcome");
}
}
}
namespace Car
{
class Goo
{
public void goo()
{
Console.WriteLine("C#");
}
}
}
namespace Human
{
class Goo
{
public void goo()
{
Console.WriteLine("watson");
}
}
}
冒頭で説明させて頂きましたが
よく見てみますと二つのプログラムのクラスの名前が一致しています。2つともGooクラスを定義しています。しかも同じファイルにコーディングされています。このままですとMainメソッドでクラスをオブジェクトにした場合どちらのクラスがオブジェクト化されるかわかりません。ここで名前空間を利用することで区別することができます。クラスをオブジェクト化させるためにインスタンスをさせる時にこのように記載します。
var cargoo = new Car.Goo ( ) ;
var humangoo = new Human.Goo ( ) ;
このようにオブジェクト化させたい方の名前空間まで記載して
インスタンスさせます。
このように記載することで、思い通りのオブジェクトを生成することができます。
using System;
namespace Program
{
class Sample
{
static void Main(string[]args)
{
Console.WriteLine("welcome");
var cargoo = new Car.Goo();
cargoo.goo();
}
}
}
namespace Car
{
class Goo
{
public void goo()
{
Console.WriteLine("C#");
}
}
}
namespace Human
{
class Goo
{
public void goo()
{
Console.WriteLine("watson");
}
}
}
さらに、名前空間はこのようにも使うことができます。
namespace Categpries.Car
{
class Goo
{
public void goo()
{
Console.WriteLine("C#");
}
}
}
namespace Categpries.Human
{
class Goo
{
public void goo()
{
Console.WriteLine("watson");
}
}
}
このように細分化することもできます。こういった場合もクラスを利用したい場合は同じクラス名がありますので、このようにフルネームで記載します。
var cargoo = new Categpries.Car.Goo();
var humangoo = new Categpries.Human.Goo();
この名前空間全て指定した形式の名前を完全修飾名と言います。ここからは補足説明なのですが、このように何回もフルネームで記載するのは、大変ですし、ソースコードが見にくくなってしまいます。using を使用することで解決します。おそらく皆さんのソースこーどのにも自動的にusing が記載されていると思います。using System;と記載されていたと思います。
これは、このソースコードは、System名前空間にあるクラスを使います。という意味です。実際に記載して見ましょう。皆さんも良かったら実際に記載してみてください。
using Categpries.Car
namespace Categpries
{
class Program
{
static void Main()
{
var cargoo = new Car.Goo();
}
}
}
先頭にこのように記載しますと、この完全修飾名を記載しなくても記載できるようになります。よく見て見ますと、先ほど完全修飾名ではありませんね、これで実行して見ますと。
このように出力されました。
はい、今回は名前空間についてということで、大きいプロジェクトを想定したクラスの利用のしかたから、補足としてusing についても説明致しました。次回の講座では皆さんが一番しようするメソッドについての内容となっています
メソッドについて実務でしっかりと使いますので是非ご覧ください。
以上で、C#入門を終了と致します。ご静聴ありがとうございました。
コメント