並ゲームプログラマの書き捨て場

ゲームプログラマやってる私の日記、雑記、備忘録、公開場所

C#は・・・

2011/02/04の記事
シェー!!djannです。

C#はどうしてこうなのだろうか?
何の話かというと、アセンブリ情報の話だ。

C++でもサードパーティ製ライブラリであれば.h以外に.libを用意したりする必要があるが、基本的に標準ライブラリはコンパイラ付属、デフォルトでリンクされる。

進んだ未来型の言語であるC#で、なぜ同じようなことをしなければならないんだ。
いやまあ、同じようなことならば別にいい。が、参照名と名前空間が違う、複数アセンブリ中に含まれているなどザラだ。


例えばSystem.Net;を使おうと思った時、もちろんSystem.Netを参照に追加しなければならない。当然だ。
が、なぜSystem.Net.Sockets;を使おうと思った際に追加する参照はSystemなのだろうか?いやまあ、こちらはSystem中に含まれているものだから、別段不自然でもない。上位の階層を含めれば、下層も自動的に使用出来るのだろう(それならSystem.Netも入れてほしいものだが)。


System.Linq;こちらを使うのにSystem.Coreを追加するとは、一体どういうことなんだ?どういう階層関係になっているのか、誰か説明をしてくれないか。
またSystem.Xmlなどは、System.Xmlが参照一覧にあるが、追加しなくとも使用することが出来た。そういうものかと思いつつSystem.Dataを外すと一気にコンパイルエラーで埋め尽くされた。
各種依存関係があり、結果そういう動作になったのだろうが(当時はただただ激昂していた)、実にややこしい。

System.Drawing等はアセンブリ解決できるものが非常に多くSystem.Windows.Forms(フォームへの描画に用いているのだろうか)やSystem.Collections.Specialized(まずこれがどういうものか分からない)、挙句の果てにはSystemでアセンブリ解決が出来た。

それならばいっそ、System.*に属しているものは全てSystemで解決できるようになっていれば楽なのだが。というか言語の思想的に(.NET Frameworkに完全に依存しているという部分で)、usingで名前空間を取り入れれば、自動でアセンブリ参照の解決を行ってくれるようには出来ないのだろうか?


MSDNで調べてみたが、その名前空間に属するクラス、インターフェース、構造体の名前が出てキタだけで、どのアセンブリを参照に追加すればいいのかと言った情報は見当たらなかった。
いやまあ詳しく調べていけば、また特定の探し方をすれば見つかるのだろうが、少なくともちょっとC#を使おうと思って調べた程度では見付からなかった。

せめてアセンブリ情報と名前空間を同じに、または包含する形に統一してくれればよかったのだが・・・。