2012-07-12 110 views
1

我有這樣一個類:重載基類的構造

public class foo 
{ 
    public foo(string a, string b) { ... } 
} 

我想要做這樣的事情:

public class bar : foo 
{ 
    public bar() 
    { 
     base = base("apple", "banana"); 
    } 
} 

的Visual Studio罵我說:

'foo' does not contain a constructor that takes 0 arguments 

是有辦法做到這一點?

+0

我不明白你想要做什麼。重載基礎構造函數是什麼意思? 「基地」的任務的目的是什麼?你想在派生構造函數之前調用參數化的基礎構造函數嗎? – CodesInChaos 2012-07-12 15:18:34

回答

7

這是爲了做到這一點:

public class foo 
{ 
    public foo(string a, string b) { ... } 
} 

public class bar : foo 
{ 
    public bar(): base("apple", "banana") // call base constructor 
    { 

    } 
} 

參考:Using Constructors (C# Programming Guide)

3

改寫這樣的:

public bar() : 
    base("apple", "banana"); 
{ 
} 
+0

是的,沒有顯式調用基礎構造函數,派生類默認構造函數將嘗試調用基本默認構造函數,並且沒有一個。 – stevethethread 2012-07-12 15:19:53

1

試試這個:

public class bar : foo 
{ 
    public bar() : base("apple", "banana") 
    { 
    } 
} 

問候

1

您需要執行以下操作。本質上,你告訴編譯器使用哪個構造函數,因爲沒有缺省的可用參數。

public class foo 
{ 
    public foo(string a, string b) { } 
} 

public class bar : foo 
{ 
    public bar() 
     : base("apple", "banana") 
    { 
    } 
} 
1

您只需要更改欄構造函數以正確調用基構造函數。

public class bar : foo 
{ 
    public bar() : base("apple", "banana") 
    { 
    } 
}