2013-11-02 5 views
0

У меня есть базовый класс StockItem и один под названием EcoStockItem и подкласс Plate. 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 должен содержать оба свойства по базовому классу и подклассам. Я не знаю, как я создам ссылку на StockItem, которая будет содержать все субатрибрумер и отправит пары углов методу Add. – user2946383

Смежные вопросы