2013-01-23 60 views
1

,是否有可能使用相同的簽名調用方法的基本版本和派生版本,而不是重寫基類版本?在C#和C++中都調用基本方法和派生方法

+1

在C#中,您可以簡單地在派生類「Method」內調用base.Method()。但我猜這不是你想要做的?從理論上講,外部世界永遠不應該知道你的課程是從任何東西中派生出來的。你派生類的抽象應該是它需要知道的一切。 – itsme86

+3

可能重複的: http://stackoverflow.com/questions/4262750/calling-the-base-classs-implementation-from-the-derived –

回答

3

對於C++,您可以使用範圍解析操作:

Derived d; 
d.Base::Method(); 
5

在C#中,不若派生方法是重寫的,但如果它被標記爲new肯定。儘管如此,在使用這個構造時,你必須小心,因爲在大多數情況下,你的對象的消費者並不會真正發生;

static class Program 
{ 
    static void Main() 
    { 
     Base baseObject = new Derived(); 
     Derived derivedObject = new Derived(); 
     Console.Write(derivedObject.Test()); 
     Console.Write(baseObject.Test()); 
     Console.Write(((Base)derivedObject).Test()); 
    } 
} 

class Base 
{ 
    public virtual int Test() 
    { 
     return 1; 
    } 
} 

class Derived : Base 
{ 
    public new int Test() 
    { 
     return 2; 
    } 
} 
+0

+1不錯的C#示例 – billz

相關問題