- - PR -
クラス継承時の参照設定について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-12-21 16:00
いつも参考にさせていただいております。
タイトルにも書きましたが、クラス継承時の参照設定についての質問です。 具体例で質問させていただきます。 Aという名前のクラスが含まれているアセンブリA.dllがあります。 Aを継承して作られたBという名前のクラスが含まれるアセンブリB.dllがあります。 Bを継承してCというクラスを作成する際、参照設定にB.dllだけを入れると、 以下のコンパイルエラーが発生します。 C.dll 参照されたクラス 'B' は参照されていないアセンブリ内で定義された基本クラスまたはインターフェイス 'A' を持っています。アセンブリ 'A' に参照を追加してください。 これでは、Bを継承する際、必ず、A.dllの存在位置を知っておかなければ使用できないような気がするのですが。 また、Cクラスを使用するプロジェクトの参照設定には、A.dll・B.dll・C.dllを全て含まなければ、同じようにコンパイルエラーとなります。 これらはVS.NETの仕様なのでしょうか? または、オブジェクト指向としての根本的な考え方なのでしょうか? ちなみに環境はVS.NET2003です。 どなたかご回答ください。よろしくお願い致します。 | ||||
|
投稿日時: 2005-12-21 16:05
まあ、間接的とはいえ依存関係には違いないですから 「コンピュータ・プログラムの根本的な考え方」 なのではないでしょうか。 | ||||
|
投稿日時: 2005-12-21 16:25
オブジェクト指向以前に、独立していないモジュールもそういうもんですよね。 コンパイラは、情報が全くないものを推理することはできません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-12-21 16:30
こんにちは。
C は B を継承するから B だけ知っていたらよいのに、という事ですね? しかし、コンパイラもそうですが、人間(さなさん)も A の存在を知らないというのは無理がある、と考えてみてはどうでしょう。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2005-12-21 16:35
lalupin4さん、じゃんぬねっとさん、囚人さんご回答ありがとうございます。
D.dll内のDクラスで、E.dll内のEクラスを使用していた場合、 D.dllを使用するプロジェクトでは、参照設定にD.dllを入れるだけで、 ビルド後のフォルダ内にはD.dllとともにE.dllも入るんので、 同等のことが起こらないのかなぁ…と思いまして。 今の場合、Dクラスが何を使ってるか意識しなくていいのに対し、先ほどの質問では クラスの継承だから、当然、継承元も意識しないといけないって事ですね。 このような、愚問に対してお付き合いいただきありがとうございました。 まだまだ、勉強せねばいけません… [ メッセージ編集済み 編集者: さな 編集日時 2005-12-21 16:37 ] | ||||
|
投稿日時: 2005-12-21 17:05
BにはAを参照するきっかけの基本情報はあるはずです。 しかしじゃぁAって何者?となったときに実際に定義されているアセンブリはどこにある?となるわけで 「プロジェクトにいないから居所を教えてくれ」エラーになるんでは。 | ||||
|
投稿日時: 2005-12-21 22:43
.NET framework v2.0 だとILMergeというのが使えるみたいですね。
こうこうことができると問題は解決するのかな? http://research.microsoft.com/~mbarnett/ILMerge.aspx で、1.1でも使えるような話もあるのですが http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=148594&SiteID=1 どなたかやってみた方いらっしゃいませんか? |
1