基类继承自另一个基类?

时间:2015-10-15 09:53:46

标签: c# .net inheritance

我正在尝试为C#中的小型Windows游戏创建一些类。我有一个带有构造函数的武器类,它继承自我的基类 Item

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对象的实例。但是,我还希望我的Item和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

为什么要在表单设计器中打开我的类文件?我不明白!

2 个答案:

答案 0 :(得分:2)

我认为只要基类没有标记为已密封且具有适当的构造函数,它就是正确的。当您创建Item类时,构造函数现在需要调用基本PictureBox构造函数,并使用其中一个公共构造函数。

e.g:

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

答案 1 :(得分:1)

你需要一个无参数的构造函数;否则,设计师无法显示您的控件(因为您从PictureBox派生它,它现在是一个控件,因此双击打开文件将加载设计器。)

根据基于组件的方法,组件必须能够通过默认构造函数创建它们并通过设置可以在属性网格中设置的公共属性来恢复。