2010-12-03 49 views
0

假設我們已經兩類汽車和司機,,
,我們能夠做出像正在運行Car c = new Driver();在C#

Car c=new Driver(); 

,並能夠對象調用Car類的成員,但不是驅動程序類的原因和時機? ?

+0

嘗試發佈更多代碼 - 沒有更多上下文很難提供幫助。 – 2010-12-03 09:06:28

回答

0

如果您確定Car實際上是Driver,那麼您可以將其轉換爲driver以訪問Driver的成員。因此,無論

((Driver)c).DriverMember(); 

這將拋出一個異常,如果c不是Driver

或者

Driver d = c as Driver; 
if(d != null){ 
    d.DriverMethod(); 
} 

的原因是因爲cCar型的,那麼只有租車的成員都可用。

例如,假設您有List<Car>,其中添加了一些Car對象和一些Driver對象。然後它非常有意義,只有Car的成員纔有可能使用。

另外,我認爲DriverCar在這種情況下繼承(這實際上是一個非常奇怪的繼承,因爲司機是汽車)。

7

儘管參考c指向Driver對象,但參考類型(Car)確定可以在其上調用哪些方法。

作爲一個附註,Driver作爲從Car派生的類沒有多大意義。類繼承通常可以表示爲「是-a」關係,而大多數驅動程序不是汽車。

0

就你而言,Car是驅動程序的基類。這就是爲什麼您可以創建新的驅動程序對象,但將它們「放入」Car對象的問題。

但是,只有類「車」的成員可見的原因是,你的對象c是從類型車,而不是從類型驅動程序和汽車有少於驅動程序的成員。