2015-10-15 47 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