- PR -

クラスの継承

投稿者投稿内容
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-04-21 13:24
クラスA(ClassA)とインターフェス(IClassB, IClassC)から
クラスZ(ClassZ)を作成したと考えています。
ClassAの役目は共通なメソッドを使用して、同じコーディングを
まとめるため。IClassB, IClassCはポリモーフィズムをサポート
するためです。しかし、.NETの場合、多重継承ができないので
困っています。

IClassB, IClassCからClassAを作成して、それからClassAを
継承してClassZを作成することを考えたのですが、意味がないよう
ようです。

このような場合、どのようにClassZを実現したら良いので
しょうか?このような場合、.NETではスマートな考えは
できないのでしょうか?

よろしくお願いします。

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-21 13:42
>多重継承ができないので困っています。

使用するオブジェクトがClassA,IClassB,IClassC,ClassZだけなら多重継承にはならないので困りませんよね。
「ClassZが、ClassAを継承しIClassBとIClassCを実装する」というのがまずいわけですか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-21 13:59
 インタフェースは多重継承できます。クラスは多重継承できません。1つのクラスと複数のインタフェースを継承することは可能です。

#と、ややこしいので、インタフェースについては「実装」と、言葉を分けてみる

 インタフェースは多重実装できます。クラスは多重継承できません。1つのクラスを継承し、複数のインタフェースを実装することは出来ます。
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-04-21 14:08
「ClassZが、ClassAを継承しIClassBとIClassCを実装する」として場合、ClassB
はIClassBとIClassCに対するモリモーフィズムがサポートされないのでは?
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-04-21 14:13
1つのクラスと複数のインタフェースを同時に継承することは可能なのでしょうか?
私が記述方法をただ知らなかっただけでしょうか?

以前、試してコンパイルエラーになったような気がします。
記述できるなら、どのように記述するのでしょうか?

よろしくお願いします。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-21 14:18
引用:

パンダさんの書き込み (2004-04-21 14:08) より:

「ClassZが、ClassAを継承しIClassBとIClassCを実装する」とし場合、ClassZはIClassBとIClassCに対するモリモーフィズムがサポートされないのでは?


ちょっと変なので、イタリック体の文字を直していますが、この直した方の意味とすると、なぜそう思います?

 たとえば、System.Collections.Specialized.NameObjectCollectionBaseなんかは、
public abstract class NameObjectCollectionBase : ICollection,
IEnumerable, ISerializable, IDeserializationCallback
と、宣言されています。インタフェースを多重実装しています。

 Visual Basic 言語の仕様4.3.2 インターフェイスと多重継承  なんかが、参考になるかな?
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-04-21 14:20
諸農です。

興味深く見ていたんですが、

引用:

「ClassZが、ClassAを継承しIClassBとIClassCを実装する」として場合、ClassB
はIClassBとIClassCに対するモリモーフィズムがサポートされないのでは?



なんだか良く判らない状況になってしまいましたが、
ClassBはどこから出てきたのでしょうか?


突然出てきたClassBに、IClassBとIClassCのインタフェースを実装するのはダメですか。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-21 14:29
ClassBって何でしょう?
ClassZの間違いですかね。

そうだとして話を進めますが、ClassZはIClassBとIClassCを実装しているわけですから、IClassBで定義されたサービス(Publicメソッド等)もIClassCで定義されたサービスも提供します。しなければコンパイルできません。
ですので、
IClassB icb=new ClassZ();
とClassZをIClassBとして見ることができます。

>どのように記述するのでしょうか
言語仕様はMSDNライブラリに入ってますよ。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csspec/html/vclrfcsharpspec_10_1_2.asp

[ メッセージ編集済み 編集者: 一郎 編集日時 2004-04-21 14:37 ]

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