2013-11-05 70 views
0

我的情況類似於以下內容。如何將基礎構造函數的參數傳遞給派生構造函數?

public abstract class Mammal{ public Mammal(name, legs){ ... } } 

public class Dog{ public Dog(name, legs) : base (name, legs) { ... } } 

我不想總是做Dog dog = new Dog("fido", 4);我寧願只是有「腿= 4」中的狗構造,並通過在只有名稱。

但是,每當我嘗試從構造函數中留下「腿」時,它會告訴我某些字段由於保護級別而無法訪問。

我正在使用getters和setters,它們都是公共的。

編輯:這裏是原來破類之一 -

public Soil(int idNo, string soilName, string prefabName) 
: base(idNo, soilName, price, weight, size, madeOf, prefabName, iconName){ 

      Price = 0; 

    Capacity = 1; 
    CanHoldSizes = new ContainerSizes[] {ContainerSizes.seed}; 
    Contents = new Item[Capacity];  
} 

而不必把所有8個參數在新的土壤()的,我想只是把4這將是不同的每個新的土壤(),並有構造函數將其餘設置爲默認值。

這就產生錯誤,如:「'Item.price」不可訪問由於其保護級別」

+0

「我正在使用getter和setters,它們都是公開的。」 - - 他們在哪? – zerkms

回答

4

你可以做到這一點

public class Dog 
{   
    public Dog(string name) : base (name, 4) { } 

    //OR this 

    public Dog(string name, int legs = 4) : base (name, legs) { } 
} 

第一個構造函數總是會創建一個哺乳動物有4個腿。

第二個將允許你這樣做new Dog("MyDog")但編譯器將用new Dog("MyDog",4)替換此代碼。

當然,使用第二個,你仍然可以做到這一點new Dog("MyDog",3),它會創建一條3條腿的狗。

+0

我明白了,謝謝。我喜歡,如果你願意的話,你仍然可以輸入3,否則如果被排除,它會輸入4。我最初的想法是把它放在構造函數中,但不要傳入它,只要把它放在主體中並完全拋棄這個論點。這不可能嗎? – Olgo

3

我必須失去了一些東西。這不是很簡單嗎?

public class Dog 
{ 
    public Dog(string name) : base (name, 4) 
    { 
    } 
} 
相關問題