2014-09-02 56 views
1

這是一個C#項目。如何有一個默認的方法,但仍然能夠覆蓋它?

我有幾個類從一個繼承。大多數兒童班有相同的行爲,而其中一些行爲有所不同。我正在使用關鍵字new

public class Parent 
{ 
    public DataTable FetchScore() 
    { 
     // blahblah 
    } 
} 

public class ChildNormal : Parent 
{ 
} 

public class ChildOdd : Parent 
{ 
    public new DataTable FetchScore() 
    { 
     DataTable dt = base.FetchScore(); 
     // blahblah 
    } 
} 

但是構建說使用new並不是一個好的做法。

我不能使用virtualoverride,因爲我想要一個默認值。我不想多次複製相同的覆蓋實現。

我大部分時間都花在JavaScript和Python上。儘管它們是動態的,我可以輕鬆做到這一點。如何用C#做到這一點?或者這種情況下的良好做法是什麼?

+1

您可以使用虛擬和覆蓋,只需將虛擬基礎方法放置在基類中。 – 2014-09-02 10:12:31

+0

另見[這裏](http://stackoverflow.com/questions/11046387/exact-difference-between-overriding-and-hiding)爲什麼*使用'new'(可能)不是你想要做的。 – Rawling 2014-09-02 10:18:22

回答

1

您需要申報基地virtual(意味着它可以被覆蓋,如果有必要)和override它在哪裏你需要不同於原始的行爲。未覆蓋派生類的行爲與基類相同。

public class Parent() 
{ 
    public virtual DataTable FetchScore() 
    { 
     // blahblah 
    } 
} 

public class ChildNormal() : Parent 
{ 
} 

public class ChildOdd() : Parent 
{ 
    public override DataTable FetchScore() 
    { 
     DataTable dt = base.FetchScore(); 
     // blahblah 
    } 
} 
相關問題