2015-10-15 82 views
2

我正在嘗試在C#中爲一個小型Windows遊戲創建一些類。我有一個類武器與構造函數,它從我的基類項目繼承:從另一個基類繼承的基類?

public class Weapon : Item 
{ 
    public int Attack { get; set; } 

    //constructor 
    public Weapon(int id, string name, int value, int lvl, int attack) : 
     base(id, name, value, lvl) 
    { 
     Attack = attack; 
    } 
} 

項目類:

public class Item 

{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int Value { get; set; } 
    public int Lvl { get; set; } 

    //constructor 
    public Item(int id, string name, int value, int lvl) 
    { 
     ID = id; 
     Name = name; 
     Value = value; 
     Lvl = lvl; 
    } 

} 

這一切工作正常,我可以打電話給我的構造並創建Weapon對象的實例。不過,我也希望我的項目和武器類從PictureBox的類繼承,像這樣:

public class Item : PictureBox 

{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int Value { get; set; } 
    public int Lvl { get; set; } 

    //constructor 
    public Item(int id, string name, int value, int lvl) 
    { 
     ID = id; 
     Name = name; 
     Value = value; 
     Lvl = lvl; 
    } 

} 

但是將上面的代碼會導致錯誤「構造函數型‘MyNamespace.Item’未找到「

我接近這個正確的方式嗎?我怎樣才能讓我的Item基類繼承另一個基類?

編輯:打開類文件時錯誤來自內部VS: enter image description here

爲什麼試圖打開我的類文件的形式設計師?我不明白!

+1

我強烈建議使用'Bitmap'屬性並且不要覆蓋'PictureBox' – kevintjuh93

+1

武器不能代替PictureBox。我想你應該重新考慮你的設計。 –

+0

Picturebox具有我需要的所有屬性。我只有一天的時間來創造這一點,所以整體設計只要有效就不重要。不過,我會看看Bitmap屬性。謝謝 – pvdev

回答

2

我相信這是正確的,只要基類沒有標記爲密封並具有適當的構造函數。當您創建Item類時,構造函數現在需要調用基礎PictureBox構造函數,並使用其公共構造函數之一。

例如爲:

//constructor 
public Item(int id, string name, int value, int lvl) 
: base(...params etc) 
{ 
+1

這裏是Nitpicking,但如果構造函數有參數,則只需顯式調用基類。暗含無參數構造函數。 – James

+0

我認爲PictureBox類有一個無參數的構造函數 - 我可以使用沒有參數的「:base()」嗎? – pvdev

+0

詹姆斯在這裏有正確的答案;如果它是無參數的(即圖片框包含一個默認構造函數),那麼你根本不需要這樣做。 – Jeb

1

你需要一個參數的構造函數;否則,設計師無法顯示您的控件(因爲您從PictureBox中派生出來,它現在是一個控件,所以通過雙擊打開文件將會加載設計器)。

根據基於組件的方法,組件必須能夠通過默認構造函數創建它們並設置公共屬性(可以在屬性網格中設置)來恢復。

+0

不太清楚我的理解。你的意思是我的Item類需要一個無參數的構造函數嗎?我希望能夠通過傳入屬性來使用構造函數創建Item的實例,你是否說如果我從控件繼承,就無法完成這項工作? – pvdev

+0

對於'Item'類及其派生類,是的。如果沒有無參數的構造函數,您將無法在設計器中打開它們,或將它們放置在像普通的「PictureBox」那樣的「Form」中。只要檢查任何控件,它們都只有一個無參數的構造函數,並且可以純粹通過它們的屬性來配置它們。如果沒有無參數的構造函數,你將不得不創建你的'Item's並將它們放在父'Form','Panel'或其他編程的地方。 – taffer

+0

啊好吧,我現在明白了。我只以編程方式處理這些對象,所以不應該成爲問題。非常感謝。 – pvdev