2014-12-05 49 views
2

我得到一个错误与此代码:为什么我不能继承这个变量?

An object reference is required for the non-static field, method, or property 

我试图从派生类继承货号变量把它放在一个构造,但由于某种原因它不接受它。

全码:

public class InvItem 
{ 
    protected int itemNo; 
    protected string description; 
    protected decimal price; 

    public InvItem() 
    { 
    } 

    public InvItem(int itemNo, string description, decimal price) 
    { 
     this.itemNo = itemNo; 
     this.description = description; 
     this.price = price; 
    } 

    public int ItemNo 
    { 
     get 
     { 
      return itemNo; 
     } 
     set 
     { 
      itemNo = value; 
     } 
    } 

    public string Description 
    { 
     get 
     { 
      return description; 
     } 
     set 
     { 
      description = value; 
     } 
    } 

    public decimal Price 
    { 
     get 
     { 
      return price; 
     } 
     set 
     { 
      price = value; 
     } 
    } 

    public virtual string GetDisplayText(string sep) 
    { 
     return itemNo + sep + description + " (" + price.ToString("c") + ")"; 
    } 
} 

public class Plant : InvItem 
{ 
    private decimal size; 

    public Plant() 
    { 
    } 

    public Plant(int itemNumber, string description, decimal price, decimal size) : base(itemNo, description, price) 
    { 
     this.Size = size; 
    } 

    public decimal Size 
    { 
     get 
     { 
      return size; 
     } 
     set 
     { 
      size = value; 
     } 
    } 

    public override string GetDisplayText(string sep) 
    { 
     return base.GetDisplayText(sep) + " (" + size + ")"; 
    } 
} 

它发生在植物类的构造函数与参数。我试图将其设置为公开,私人和保护,但它们都产生相同的结果。

+0

变量'itemNo'不存在,正确的变种是'公共厂(INT itemNumber,字符串描述,小数价格,小数的大小):基地(itemNumber,说明,价格)' – 2014-12-05 00:49:14

回答

3

当您在构造函数上调用base时,这些变量甚至不存在(基类尚未构造)。

因此,您无法在base构造函数调用中将类成员传递给它。相反,你需要:

public Plant(int itemNumber, string description, decimal price, decimal size) : 
    base(itemNumber, description, price) 
{ 
} 

这将转嫁给基类,这是你想要的东西提供给Plant的参数。

0
public Plant(int itemNumber, string description, decimal price, decimal size) 
      : base(itemNo, description, price) 
     { 
      this.Size = size; 
     } 

当您在构造函数中使用它时,您还没有访问基类成员的权限,所以您会收到错误消息。

0

您不能在您的构造函数中引用继承的属性。这样做:

public Plant(int itemNumber, string description, decimal price, decimal size) 
    : base(itemNumber, description, price) 
{ 
    this.Size = size; 
}