2013-11-02 60 views
0

我有一个名为StockItem的基类和一个名为EcoStockItemPlate子类。 EcoStockItem有一个Juice对象,它是EcoStockItem的子类。在另一课上,我有方法AddItem (StockItem p)。从Form1类中,我应该将StockItem项作为参数发送给方法AddItem?我无法从子类访问其他属性。我应该怎么做?创建一个StockItem的对象来继承子类的所有属性并将其添加到StockItem数组?访问子类属性

public class StockItem 
{ 
    private Juice newJuice; 


    public int Id { get; set; } 
    public string Name { get; set; } 
    public int StockCount { get; set; } 



    public StockItem(int Id, string Name, int StockCount) 
    { 
     this.Id = Id; 
     this.Name = Name; 
     this.StockCount = StockCount; 

    } 

    public StockItem() 
    { 
     // TODO: Complete member initialization 
    } 

    public StockItem(Juice newJuice) 
    { 
     // TODO: Complete member initialization 
     this.newJuice = newJuice; 
    } 



    public override string ToString() 
    { 
     return String.Format("Id:{0} Namn:{1} Count:{2}", Id,Name,StockCount); 
    } 
} 


    public class EcoStockItem : StockItem 
    { 

     public string Markning { get; set; } 
     public EcoStockItem() 
     { 
     } 

     public EcoStockItem(string Markning) 
     { 
      this.Markning = Markning; 
     } 
     public EcoStockItem(int i, string n, int sc, string Markning):base (i,n,sc) 
     { 
      base.Id = i; 
      base.Name = n; 
      base.StockCount = sc; 
      this.Markning = Markning; 
     } 


     public override string ToString() 
     { 
      return String.Format("Mark: {0}", Markning); 
     } 
    } 
    public class Plate : StockItem 
    { 
     public string Typ { get; set; } 

     public Plate(string Typ) 
     { 
      this.Typ = Typ; 
     } 

     public Plate(int i, string n, int sc, string Typ):base (i,n,sc) 
     { 
      base.Id = i; 
      base.Name = n; 
      base.StockCount = sc; 
      this.Typ = Typ; 
     } 

     public Plate() 
     { 
      // TODO: Complete member initialization 
     } 



     public override string ToString() 
     { 
      return String.Format("Plate: {0}", Typ); 
     } 

    } 

    public class Juice : EcoStockItem 
    { 


     public string Typ { get; set; } 

     public Juice (string Typ) 
     { 
      this.Typ = Typ; 
     } 

     public Juice(int i, string n, int sc, string m,string Typ):base (i,n,sc,m) 
     { 
      base.Id = i; 
      base.Name = n; 
      base.StockCount = sc; 
      base.Markning = m; 
      this.Typ = Typ; 
     } 

     public Juice() 
     { 
      // TODO: Complete member initialization 
     } 


     public override string ToString() 
     { 
      return String.Format("Juice: {0}", Typ); 
     } 

} 

class Stock 
{ 

    public StockItem[] StockItems = new StockItem[10]; 


    public void AddItem(StockItem item) 
    { 
     int index = GetCount(); 
     StockItems[index] = item; 
     Form1.myForm.textBoxTest.Text = StockItems[index].ToString(); 
    } 

    public int GetCount() 
    { 
     int count = 0; 
     for (int n = 0; n < StockItems.Length; n++) 
     { 

      if (StockItems[n] != null) 
      { 

       count++; 
      } 
     } 
     return count; 
    } 


} 

}

class Form1 


private void buttonAdd_Click(object sender, EventArgs e) 
    { 

     newStockItem = new StockItem(); 
     newStockItem.Id = id; 
     newStockItem.Name = name; 
     newStockItem.StockCount = stockcount; 
     newEcoStockItem = new EcoStockItem(); 
     newEcoStockItem.Markning = markning; 
     newPlate = new Plate(); 
     newPlate.Typ = typ; 
     newJuice = new Juice(); 
     newJuice.Typ = jtyp; 
     //StockItem p = new StockItem(...........); ????????????? 

     Stock stock = new Stock(); 
     //stock.AddItem(p); 

回答

1

三两件事:

  1. 传承提供了一个关系,所以这应该很好地工作:

    newJuice = new Juice(); 
    newJuice.Typ = jtyp; 
    
    Stock stock = new Stock(); 
    //stock.AddItem(newJuice); // this works since Juice IS a StoceItem 
    
  2. 存储变量数的集合中的项目的List将变得更加高效:

    class Stock 
    { 
        public List<StockItem> StockItems = new List<StockItem>(); 
    
        public void AddItem(StockItem item) 
        { 
         StockItems.Add(item); 
         Form1.myForm.textBoxTest.Text = item.ToString(); 
        } 
    
        public int GetCount() 
        { 
         return StockItems.Count; 
        } 
    } 
    
  3. 不要从类直接引用的形式 - 这可能是为什么你;再没有看到你所期望的结果。通常,表单从其创建的对象中提取数据,或使用事件获取推送给它的信息。

+0

这是一个学校项目和程序框架是为uml制作的。真的需要帮助。附上这一个星期。 – user2946383

+0

#1应该回答你的问题 - 2和3只是建议。如果您有问题,请在您的问题中添加更多详细信息(特定错误消息?)。 –

+0

索引0中的数组项必须同时包含基类和子类的属性。我不知道如何创建将包含所有subatributer的StockItem的引用,并将对角度发送到Add方法。 – user2946383