2010-12-03 8 views
0

が思うC#で、私たちは二つのクラスの車とドライバー,,
をしましたし、我々は、カークラスのメンバーを呼び出すためのランニングカーc = new Driver();

Car c=new Driver(); 

とできるようなオブジェクトを作成することができますではなく、ドライバクラスのなぜとすると? ?

+0

あなたのコードをもっと投稿してみてください。それ以上の文脈がなければ助けはありません。 –

+1

「ドライバ」が何らかの形で「車」から継承しない限り(それは意味をなさない)、どのようにオブジェクトを作成することができますか? – BoltClock

+0

宿題にしてください。 – VVS

答えて

0

あなたは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から継承していることを前提としています。

7

参照cDriverオブジェクトを指しているにもかかわらず、参照のタイプ(Car)によって呼び出されるメソッドが決まります。

DriverCarに由来するクラスとして持つことはあまり意味がありません。クラス継承は、通常、「is-a」関係として表現することができ、ほとんどのドライバは車ではありません。

0

あなたのケースでは、Carは基本クラスのドライバです。これは、新しいドライバオブジェクトを作成できますが、それらをCarオブジェクトに「置く」ことができる理由です。

しかし、クラス "car"のメンバーだけが目に見える理由は、オブジェクトcがタイプCarからであり、タイプDriverからではなく、カーがドライバより少ないメンバーであるということです。

関連する問題