2016-05-02 25 views
0

我有一些C#類的擴展和重寫的方法。明確調用基地或重寫的方法

public class BaseClass{ 
    public abstract void method(){return 0;} 
} 

public class OverClass : BaseClass{ 
    public override void method(){ 
     // some code 
     return 2; 
    } 
} 

內的覆蓋的方法,我可以叫base.method()調用基類的原始方法。

1)我該怎麼做那個課外?所以我可以從OverClass的對象引用顯式調用BaseClass的方法。

2)從BaseClass的對象,我可以調用OverClass的方法嗎? 3)如果方法是靜態的,從BaseClass的靜態主體,我可以調用OverClass的方法嗎?

我需要這樣做,因爲BaseClass中的某些方法具有不需要重寫的可重用代碼以及其他抽象/虛擬方法,並且具有特定的OverClass代碼。因此,從BaseClass中的代碼中,我需要調用OverClass的重寫方法,而不是BaseClass的抽象/虛擬方法。

+3

'抽象'方法不能有正文,你的意思是'虛擬'而不是?其餘的,你不能用標準的方式。 –

回答

0
  1. 您需要專門的方法,不會被過度訓練或不會被標記爲抽象的具體方法。
public class BaseClass{ 
    public abstract void method(){ return 0; } 
    public void concrete(){ method(); } 
} 

public class OverClass : BaseClass{ 
    public override void method(){ 
     // some code 
     return 2; 
    } 
}  

//You can call concrete like that: 
instanceOverClass.concrete(); 
instanceBaseClass.conctere(); 
  • 是。但是,只有當你有上層階級的實例盒裝作爲BaseClass的,沒有如果這是上層階級的實例
  • BaseClass instanceOverClass = new OverClass(); 
    (OverClass)instanceOverClass.method(); 
    //Note that here we will call overriden method from OverClass class 
    instanceOverClass.method(); 
    
  • 您可以隨時調用靜態方法在你的代碼的形式無處不在,但你需要記住,靜態方法不會繼承,所以你可以調用BaseClass.method();
  • 編輯:我想說明這個anwser不包括反射,女巫會做你想要的,但反射非常非常緩慢。

    相關問題