- ベストアンサー
C#でクラス継承について
- C#でクラス継承についての具体的なコード例を紹介します。
- クラス継承において、引数の不一致エラー(CS1502)が発生する場合、キャストを使用する必要があるかどうか確認します。
- funcメソッドに渡す引数をキャストすることで、エラーを回避できる場合があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
aaaとbbbはあくまでもBase型なので、func(Base)が呼び出されます。 >func(aaa), func(bbb)の呼び出し部分をループで… OOPでは一般的に、多態性を使ったコードで実装します。 コード自体を改変出来るのであれば、慣用的な実装の方が良いと思います。 abstract class Base { public abstract void func(){} } class Sub1 : Base { public override void func(){ ... } } class Sub2 : Base { public override void func(){ ... } } Base aaa = new Sub1(); Base bbb = new Sub2(); aaa.func(); bbb.func();
その他の回答 (1)
- tsukasa-12r
- ベストアンサー率65% (358/549)
私も、Sub1.func()、Sub2.func() を実装する方法が良いのでは、と思いますが・・・、 ご質問のような記述は、可能なことは可能です。 (無理やり感は否めませんが) static void Main(string [] args) { Base aaa = new Sub1(); Base bbb = new Sub2(); func(aaa); func(bbb); } private void func(Base b) { if (b is Sub1) { func((Sub1)b); } if (b is Sub2) { func((Sub2)b); } } これなら、ループの中ではキャストしなくて済みます。
お礼
ご回答ありがとうございました。
お礼
オブジェクト指向をちょっと勘違いしていたようです ご回答ありがとうございました。