- PR -

インターフェイスの実装

1
投稿者投稿内容
Kanazawa
会議室デビュー日: 2003/07/16
投稿数: 3
投稿日時: 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/06/22
投稿数: 659
お住まい・勤務地: 愛知県
投稿日時: 2003-07-16 20:26
クラスAとクラスBが相互参照されているのが原因では?

クラスAで定義されている型(自作の型)を、
クラスA内ではなく単独で定義するのは問題有りなのでしょうか?
Kanazawa
会議室デビュー日: 2003/07/16
投稿数: 3
投稿日時: 2003-07-17 09:30
おはようございます。
ななさん、ご回答ありがとうございます。

>クラスAとクラスBが相互参照されているのが原因では?

そのようです。
実際、クラスA内にクラスBのインターフェイス定義を含めるとエラーが発生
していないので…

>クラスAで定義されている型(自作の型)を、
>クラスA内ではなく単独で定義するのは問題有りなのでしょうか?

クラスAは共通部分として使っていまして、単独で定義するのは問題ありです。
やはり対応策としては、相互参照をさせない作りにするしかないのでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-17 10:09
こんにちは。

よく飲み込めないのですが、、、
引用:

Kanazawaさんの書き込み (2003-07-17 09:30) より:

クラスAは共通部分として使っていまして、単独で定義するのは問題ありです。
やはり対応策としては、相互参照をさせない作りにするしかないのでしょうか?


クラス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 ]
Kanazawa
会議室デビュー日: 2003/07/16
投稿数: 3
投稿日時: 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

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