【初心者向け】名前空間がよく分からない人へ
書いてる間に質問がクローズされており、悲しかったのでここに供養します。
初心者向けの内容です。C#カテゴリの質問だけど、Javaやそれ以外の言語も大体同じだと思う。
質問
c#の場合、名前空間.クラス名という構造になっていると思います
system.timerといった具合です
しかし、どうして別々の名前何でしょうか
回答
ディレクトリの仕組みと同じです。
ディレクトリの場合、フォルダ\ファイル名という構造になっています。
C:\Folder\File.txtといった具合です。
同名のFile.txtというファイルがあった場合、フォルダで分けないと区別がつきませんよね。
>クラス.クラス
ファイルの中に別のファイルの中身を持つことはできますが、外部からアクセスするときは面倒です。
ファイルAが別のファイルBの中身を保有しています。
ユーザーがファイルBの中身をみたいとき、ファイルAを介してファイルBの中身を見ないといけません。
それってプログラムする上で結構ノイズだし、適切なときにそういうデータの持ち方をしないと分かりづらいんです。
クラスも同じで、C#ではクラスの中にクラスを定義できます。内部クラスという機能です。ただこれも、外側のクラスを介して内部クラスを介さないといけないので、
「AというオブジェクトはBというオブジェクトを保有している」という関係にならないと、Bを内部クラスにするのは分かりづらいです。
>名前空間.名前空間
これは仰る意味がよくわかりません。名前空間ってただのフォルダ名のようなものなので、その表現ではクラスを指定できませんよね。
Timerは名前だけは似ていますが、名前空間によって機能は変わってきます。
- System.Timers.Timer
- System.Threading.Timer
- System.Windows.Forms.Timer
- System.Windows.Threading.DispatcherTimer
区別をつけるために名前空間があります。
もしあなたが、「仕事のスケジュールを書く」と書かれている「TODO.txt」というファイルを開きたいときに、次のような状態だったらどう区別しますか?
フォルダTODO_LISTの構成
- TODO.txt
- TODO.txt
- TODO.txt
- TODO.txt
まあ実際は同じファイル名をつけることは出来ないんですけど。
もし同じ名前つけることができてしまったら、「仕事のスケジュールを書く」と書かれている「TODO.txt」がどれかを判別することができません。
なのでフォルダを分けてあげて区別をするんです。