- - PR -
インターフェイスの実装
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-07-16 17:54
初めて投稿いたします。宜しくお願いします。
別ソリューションで作成したクラスA,クラスBがあり、 クラスBで定義したインターフェイスをクラスAに実装しようと 思っているのですが、エラーが発生し実装することができません。 参照設定は、クラスA⇔クラスBという具合に、お互いを参照している状態です。 ちなみに、クラスBで定義されているインターフェイス部分をクラスAに含めると エラーは発生しませんでした。 何が悪いのか全く見当がつかず、大変悩んでいます。 もしどなたか、経験された方 or 御存知の方がいらっしゃいましたら 御教授をお願いします。 ------ クラスA↓--------------------------------------------------------------- Imports クラスB名前空間 Public Class TestClass Implements IInterfaceTest @ ~~~~~~~~~~~~~~~~ Public Function Test() As クラスAで定義されている型(自作の型) _ Implements IInterfaceTest.Test A ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Return 処理結果 End Function End Class ------------------------------------------------------------------------------- ------ クラスB↓---------------------------------------------- Imports クラスA名前空間 Public Interface IInterfaceTest Function Test() As クラスAで定義されている型(自作の型) End Interface --------------------------------------------------------------- クラスAの@の部分で発生するエラー内容↓ 'クラスA名前空間.Test' は、インターフェイス 'クラスB名前空間.IInterfaceTest' に対して 'Overridable Function Test() As クラスAで定義されている型' を実装しなければなりません。 クラスAのAの部分で発生するエラー内容↓ 'Test' で 'Test' を実装できません。インターフェイス 'IInterfaceTest' に、対応する function がありません。 | ||||
|
投稿日時: 2003-07-16 20:26
クラスAとクラスBが相互参照されているのが原因では?
クラスAで定義されている型(自作の型)を、 クラスA内ではなく単独で定義するのは問題有りなのでしょうか? | ||||
|
投稿日時: 2003-07-17 09:30
おはようございます。
ななさん、ご回答ありがとうございます。 >クラスAとクラスBが相互参照されているのが原因では? そのようです。 実際、クラスA内にクラスBのインターフェイス定義を含めるとエラーが発生 していないので… >クラスAで定義されている型(自作の型)を、 >クラスA内ではなく単独で定義するのは問題有りなのでしょうか? クラスAは共通部分として使っていまして、単独で定義するのは問題ありです。 やはり対応策としては、相互参照をさせない作りにするしかないのでしょうか? | ||||
|
投稿日時: 2003-07-17 10:09
こんにちは。
よく飲み込めないのですが、、、
クラスAをクラスライブラリプロジェクトにしてしまい、 クラスA内で定義するのではなく、クラスライブラリプロジェクトAで定義する、 というのは、どうでしょう? よくわからないのですが、こんなことしてます?(しているように理解しました) Solution_A CLASS_A.vb |Public Class A |Implements IB | Public Class AA | End Class |End Class Solution_B CLASS_B.vb |Public Interface B |Public Function F_B() As A.AA |End Interface クラスAが「共通で使う」ものなら、 それがインプリメントするインターフェースBも「共通で使われる」ので、 クラスA内で定義すべき・・・と思います。 ↑ 送信ボタンを押してから気が付いたけれど、「クラスA内」って、変。 「プロジェクトA」かな? Kanazawaさんが使われている「クラスA」という記述が、 「Class」なのか、「ファイル」なのか、よくわからないので、 とりあえず注記として追加 #あ?「プロジェクトA」に「子」をつけたくなる私っていったい・・・ [ メッセージ編集済み 編集者: Jitta 編集日時 2003-07-17 10:12 ] | ||||
|
投稿日時: 2003-07-17 11:02
Jittaさんアドバイスありがとうございます。
申し訳ありません。VB.NETを開始して間もないもので・・・ 色々と説明不足、勉強不足がありました。 実際はこんな感じです。↓ Solution_A CLASS_A.vb |Public Class A | Implements IB |End Class CLASS_AA.vb |Public Class AA |End Class Solution_B CLASS_B.vb |Public Interface B | Public Function F_B() As A.AA |End Interface <クラスAが「共通で使う」ものなら、 <それがインプリメントするインターフェースBも「共通で使われる」ので、 <クラスA内で定義すべき・・・と思います。 Jittaさんのアドバイスを設計者に説明した所、 ソリューションBで定義されていたインターフェイス定義を ソリューションAに含めることになりました。↓ Solution_A CLASS_A.vb |Public Class A | Implements IB |End Class CLASS_AA.vb | Public Class AA |End Class CLASS_B.vb |Public Interface B | Public Function F_B() As A.AA |End Interface 色々と勉強になりました、ありがとうございます。 今後ともよろしくお願いいたします。 |
1