2012-03-16 74 views

回答

0

在你的派生類的構造函數,你需要調用你的基類的構造像這樣:

base(param1,param2,...) 

如果不顯式調用基類的構造,在基類的默認構造函數將被調用,如果一個存在。如果沒有,你會得到一個編譯錯誤。

2

做你的構造保護會做的東西

public abstract class A 
{ 
protected A(string v) { V = v; } 
public string V { get; protected set; } 
} 

public class AA : A 
{ 
public AA(string v) : base (v) {} 
} 
+2

我認爲OP試圖避免實現具有相同簽名的構造函數。你不能在C#中繼承構造函數。只能從基地調用那些(就像你在代碼中那樣) – 2012-03-16 13:57:51

+0

就我個人而言,我認爲這是C#最大的失敗之一。在基類中聲明的每個公共方法都可以在派生類中自動使用,但是所有構造函數都需要明確定義。每次我必須編寫簡單地調用基本實現的相同構造函數時,我都會詛咒C#團隊。 – adelphus 2012-03-16 14:17:02

2

如果抽象基類有一個默認的構造函數(即不帶參數的構造函數),它會自動由派生類的構造函數調用,除非他們顯式調用基類的另一個構造函數。

abstract class B 
{ 
    protected B() 
    { 
     ... 
    } 

    protected B(object foo) 
    { 
     ... 
    } 
} 

class D : B 
{ 
    public D() 
     : base() // not actually necessary, since it's called implicitly 
    { 
    } 

    public D(object foo) 
     : base(foo) 
    { 
    } 
} 
+0

也許你可以用派生類的需求來完成答案,如果基類沒有默認的構造函數 – 2012-03-16 14:00:57