• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#でクラス継承について)

C#でクラス継承について

このQ&Aのポイント
  • C#でクラス継承についての具体的なコード例を紹介します。
  • クラス継承において、引数の不一致エラー(CS1502)が発生する場合、キャストを使用する必要があるかどうか確認します。
  • funcメソッドに渡す引数をキャストすることで、エラーを回避できる場合があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • shiren2
  • ベストアンサー率47% (139/295)
回答No.1

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();

darum
質問者

お礼

オブジェクト指向をちょっと勘違いしていたようです ご回答ありがとうございました。

その他の回答 (1)

回答No.2

私も、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); } } これなら、ループの中ではキャストしなくて済みます。

darum
質問者

お礼

ご回答ありがとうございました。

関連するQ&A

専門家に質問してみよう