が思うC#で、私たちは二つのクラスの車とドライバー,,
をしましたし、我々は、カークラスのメンバーを呼び出すためのランニングカーc = new Driver();
Car c=new Driver();
とできるようなオブジェクトを作成することができますではなく、ドライバクラスのなぜとすると? ?
が思うC#で、私たちは二つのクラスの車とドライバー,,
をしましたし、我々は、カークラスのメンバーを呼び出すためのランニングカーc = new Driver();
Car c=new Driver();
とできるようなオブジェクトを作成することができますではなく、ドライバクラスのなぜとすると? ?
あなたはCar
が実際にDriver
であることを確信している場合は、Driver
のメンバーにアクセスするdriver
にキャストすることができます。 c
がないのであればどちらか
((Driver)c).DriverMember();
これは、例外がスローされますDriver
それとも
Driver d = c as Driver;
if(d != null){
d.DriverMethod();
}
理由はc
がタイプCar
であるため、その後、唯一の車のメンバーが利用可能であることです。
たとえば、List<Car>
の場合は、Car
のオブジェクトとDriver
のオブジェクトを追加したとします。それから、Car
のメンバーだけが利用可能であることが理にかなっています。
はまた、私はDriver
が(ドライバがない車ですので、実際にはかなり奇妙な継承である)、この場合にCar
から継承していることを前提としています。
参照c
がDriver
オブジェクトを指しているにもかかわらず、参照のタイプ(Car
)によって呼び出されるメソッドが決まります。
Driver
をCar
に由来するクラスとして持つことはあまり意味がありません。クラス継承は、通常、「is-a」関係として表現することができ、ほとんどのドライバは車ではありません。
あなたのケースでは、Carは基本クラスのドライバです。これは、新しいドライバオブジェクトを作成できますが、それらをCarオブジェクトに「置く」ことができる理由です。
しかし、クラス "car"のメンバーだけが目に見える理由は、オブジェクトcがタイプCarからであり、タイプDriverからではなく、カーがドライバより少ないメンバーであるということです。
あなたのコードをもっと投稿してみてください。それ以上の文脈がなければ助けはありません。 –
「ドライバ」が何らかの形で「車」から継承しない限り(それは意味をなさない)、どのようにオブジェクトを作成することができますか? – BoltClock
宿題にしてください。 – VVS