2014-11-21 56 views
-1
class A 
{ 
    public Start(){} 
} 

class B:A 
{ 
    public Start(){} 
} 

class C:B 
{ 
public Start() 
{ 
    //i want to call B's Start() 
    // when i do base.Start(); 
    //it calls A's Start(); 
} 
} 

如何從C的Start()中調用B的Start();當我從C的Start()調用base.Start()時,它調用A的Start();如何在多級繼承中調用父級的方法

+0

使用虛擬/超馳;因爲它現在是隱藏的,而不是繼承 – Lanorkin 2014-11-21 09:26:53

+2

否 - 它調用'B.Start'。 – 2014-11-21 09:28:32

+0

如果你在'B的Start()'方法中沒有'base.Start()',那麼Konrad提到它會調用'B的Start()'而不是'A的Start()'方法。 – Michael 2014-11-21 09:37:28

回答

0

請確定你有什麼問題。根據7.6.8,你的方法不是虛擬的。 C#語言規範:

在結合時,形式base.Ibase[E]的基本訪問表達式進行求值就好像它們被寫入((B)this).I((B)this)[E],其中B是基類的類或結構,其中構造發生。因此,base.Ibase[E]對應於this.Ithis[E],除了這被視爲基類的一個實例。

所以那些實際上:

class C:B 
{ 
    public Start() 
    {   
     ((B)this).Start(); // same as base.Start(); 
    } 
} 
+0

爲什麼這裏的地獄用戶沒有特定的理由就會給出負面評價? – sanmeet 2014-11-21 11:45:33

+0

@sanmeet,在我看來他們不應該......但它有時只是發生.. – 2014-11-21 11:48:03

+0

這是令人沮喪。 :( – sanmeet 2014-11-22 05:15:30