2017-06-06 73 views
-1

我有一個子類,它覆蓋了抽象的基類中的虛擬方法。 我可以通過子類實例訪問基類的虛方法嗎?我可以通過其子類的實例訪問基類的虛方法嗎?

謝謝。

例如

public abstract class BaseClass{ 
    public virtual void MyMethod(){...} 
} 

public Class SubClass{ 
    public override void MyMethod(){...} 
} 

public static void Main(string[] args) 
{ 
    SubClass MyObject = new SubClass(); 
    MyObject.MyMethod(); // need a way to refer to BaseClass.MyMethod, instead of SubClass.MyMethod(). 
} 
+1

如果這是您的用例,重寫SubClass中的方法是沒有意義的。 –

+0

我沒有寫兩個類。 – Tim

+1

如果你自己的代碼我個人變化,由於糟糕的對象設計,但如果你堅持,你可以做一些瘋狂的東西仍然執行它,看看這個 - https://stackoverflow.com/a/14415506/4079967 –

回答

1

是。

public class SubClass : BaseClass 
{ 
    public override void MyMethod() 
    { 
     base.MyMethod(); 
    } 
} 
1

不,沒有合理的方法只從外部調用基礎虛擬方法。

如果你控制派生類中最簡單的方法是通過其他方法來揭露base.MyMethod。如果你不能改變派生類,我認爲你運氣不好。

即使你可以嘗試通過反射來獲取精確的方法,並與給定的實例調用它,它仍然會執行派生方法虛擬呼叫。

var d = new SubClass(); 
var m = typeof(BaseClass).GetMethod("MyMethod"); 
m.Invoke(d, new object[0]); // calls SubClass.MyMethod 
+0

(不太合理的方式是在https://stackoverflow.com/questions/4357729/use-reflection-to-invoke-an-overridden-base-method可用 - 謝謝[凱文·史密斯(https://stackoverflow.com/用戶/ 4079967/kevin-smith)鏈接 - 關閉爲dup) –

相關問題