- - PR -
クラスの継承
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-04-21 13:24
クラスA(ClassA)とインターフェス(IClassB, IClassC)から
クラスZ(ClassZ)を作成したと考えています。 ClassAの役目は共通なメソッドを使用して、同じコーディングを まとめるため。IClassB, IClassCはポリモーフィズムをサポート するためです。しかし、.NETの場合、多重継承ができないので 困っています。 IClassB, IClassCからClassAを作成して、それからClassAを 継承してClassZを作成することを考えたのですが、意味がないよう ようです。 このような場合、どのようにClassZを実現したら良いので しょうか?このような場合、.NETではスマートな考えは できないのでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2004-04-21 13:42
>多重継承ができないので困っています。
使用するオブジェクトがClassA,IClassB,IClassC,ClassZだけなら多重継承にはならないので困りませんよね。 「ClassZが、ClassAを継承しIClassBとIClassCを実装する」というのがまずいわけですか? | ||||
|
投稿日時: 2004-04-21 13:59
インタフェースは多重継承できます。クラスは多重継承できません。1つのクラスと複数のインタフェースを継承することは可能です。
#と、ややこしいので、インタフェースについては「実装」と、言葉を分けてみる インタフェースは多重実装できます。クラスは多重継承できません。1つのクラスを継承し、複数のインタフェースを実装することは出来ます。 | ||||
|
投稿日時: 2004-04-21 14:08
「ClassZが、ClassAを継承しIClassBとIClassCを実装する」として場合、ClassB
はIClassBとIClassCに対するモリモーフィズムがサポートされないのでは? | ||||
|
投稿日時: 2004-04-21 14:13
1つのクラスと複数のインタフェースを同時に継承することは可能なのでしょうか?
私が記述方法をただ知らなかっただけでしょうか? 以前、試してコンパイルエラーになったような気がします。 記述できるなら、どのように記述するのでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2004-04-21 14:18
ちょっと変なので、イタリック体の文字を直していますが、この直した方の意味とすると、なぜそう思います? たとえば、System.Collections.Specialized.NameObjectCollectionBaseなんかは、 public abstract class NameObjectCollectionBase : ICollection, IEnumerable, ISerializable, IDeserializationCallback と、宣言されています。インタフェースを多重実装しています。 Visual Basic 言語の仕様4.3.2 インターフェイスと多重継承 なんかが、参考になるかな? | ||||
|
投稿日時: 2004-04-21 14:20
諸農です。
興味深く見ていたんですが、
なんだか良く判らない状況になってしまいましたが、 ClassBはどこから出てきたのでしょうか? 突然出てきたClassBに、IClassBとIClassCのインタフェースを実装するのはダメですか。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 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 ] |