- PR -

クラス継承時の参照設定について

1
投稿者投稿内容
さな
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 59
お住まい・勤務地: 大阪・肥後橋
投稿日時: 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です。

どなたかご回答ください。よろしくお願い致します。
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2005-12-21 16:05
引用:

これらはVS.NETの仕様なのでしょうか?
または、オブジェクト指向としての根本的な考え方なのでしょうか?


 まあ、間接的とはいえ依存関係には違いないですから
「コンピュータ・プログラムの根本的な考え方」
なのではないでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-21 16:25
引用:

さなさんの書き込み (2005-12-21 16:00) より:

これらはVS.NETの仕様なのでしょうか?
または、オブジェクト指向としての根本的な考え方なのでしょうか?


オブジェクト指向以前に、独立していないモジュールもそういうもんですよね。
コンパイラは、情報が全くないものを推理することはできません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-12-21 16:30
こんにちは。

C は B を継承するから B だけ知っていたらよいのに、という事ですね?
しかし、コンパイラもそうですが、人間(さなさん)も A の存在を知らないというのは無理がある、と考えてみてはどうでしょう。

_________________
囚人のジレンマな日々
さな
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 59
お住まい・勤務地: 大阪・肥後橋
投稿日時: 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/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-12-21 17:05
引用:

D.dll内のDクラスで、E.dll内のEクラスを使用していた場合、
D.dllを使用するプロジェクトでは、参照設定にD.dllを入れるだけで、
ビルド後のフォルダ内にはD.dllとともにE.dllも入るんので、
同等のことが起こらないのかなぁ…と思いまして。
今の場合、Dクラスが何を使ってるか意識しなくていいのに対し、先ほどの質問では
クラスの継承だから、当然、継承元も意識しないといけないって事ですね。


BにはAを参照するきっかけの基本情報はあるはずです。
しかしじゃぁAって何者?となったときに実際に定義されているアセンブリはどこにある?となるわけで
「プロジェクトにいないから居所を教えてくれ」エラーになるんでは。
ジブ
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 135
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)