2016-06-23 5 views
0

Я действительно новичок в C#, и сейчас я работаю над заданием, которое для меня действительно не имеет смысла. Мне нужен удар в правильном направлении.Array in Classes C#

Назначение:

мне нужно сделать консольное приложение, которое называется grocerylist. Этот список продуктов содержит класс под названием GroceryList. Этот класс содержит экземпляры переменных, которые являются массивами.

В массиве содержатся элементы типа продукта.

продукт класса имеет имя и количество строк в качестве атрибутов. Класс продукта является абстрактным и имеет 2 подкласса, называемых свежими и травами.

Мне нужно показать, что я могу добавлять элементы в GroceryList и отображать список.

Проблема у меня в том, что массив находится в классе GroceryList, и я не могу добавить к нему продукты. Я что-то упускаю, я несколько недель размышлял над тем, что может быть, и безрезультатно пробовал разные решения. Мне даже интересно, неправильно ли назначено задание. Это то, что я до сих пор:

namespace GroceryList 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      bool Displaymenu = true; 
      while (Displaymenu == true) 
      { 
       Displaymenu = mainMenu(); 
      } 


     } 
     public bool mainMenu() 
     { 
      Console.WriteLine("What would you like to do?"); 
      Console.WriteLine("1) add a fresh product"); 
      Console.WriteLine("2) add a herb"); 
      Console.WriteLine("3) exit"); 

      string result = Console.ReadLine(); 

      if (result == "1"); 
      { 
       Console.Clear(); 
       product.fresh fresh1 = new product.fresh(); 
       Console.WriteLine("What type of fresh product would you like to add?"); 
       fresh1.naam = Console.ReadLine(); 

       Console.WriteLine("How much of " + fresh1.naam + " would you like to add?"); 
       string number = Console.ReadLine(); 
       int quant; 
       int.TryParse(number, out quant); 
       fresh1.Quantity = quant; 



       return true; 
      } 
     } 
    } 
    public class GroceryList 
    { 
     List<product> products = new List<product>(); 

    } 
    abstract class product 
    { 
     public string naam { get; set; } 
     public int Quantity { get; set; } 

     public class fresh : product 
     { 

     } 
     public class herbs : product 
     { 

     } 
    } 

} 
+0

Ваши модификаторы доступа отключены. Вы сами это сказали: «Проблема в том, что массив находится в классе GroceryList, и я не могу добавить к нему продукты». Так что сделайте так, чтобы вы могли, читая о модификаторах доступа;) – TyCobb

+0

Вам нужно явно указать свой список как открытый в GroceryList. В C# свойства по умолчанию помечены как закрытые, если вы не надели на них модификатор доступа. – LaneL

ответ

1

GroceryList класс, который вы создали потребности в экземпляр класса (объявившего) в вашем коде, так что вы можете использовать List<product> внутри него. Точно так же, как вы объявили fresh1 как объект product.fresh, вы должны объявить объект как GroceryList.

Итак, вы можете объявить GroceryList list = new GroceryList() в начале вашего кода. Затем вы захотите добавить элементы в поле products вашего GroceryList list.

Существует два способа сделать это. Одним из способов является прямой доступ к объекту list внутри класса.

Для этого вам необходимо сделать поле listpublic так, чтобы к нему можно было получить доступ извне объекта. Чтобы объявить его общедоступным, введите ключевое слово public в полевую декларацию.

Это не обязательно лучший способ сделать это, так как для функции, такой как добавление, лучше иметь ясный method, который делает такие действия как в полях вместо их изменения непосредственно извне объекта (если вы хотите узнать больше об этой идее, это называется Encapsulation.) Полезным методом, который вы могли бы использовать для этой программы, был бы метод AddProduct.

Теперь, что нам нужно для этого метода? Добавьте объект product к list, который у нас есть в нашем GroceryList.

Итак, мы должны объявить метод внутри объекта GroceryList следующим образом.

public void AddProduct(product productToAdd) 
{ 
    products.Add(productToAdd); 
} 

Затем, когда вы хотите, чтобы добавить товар в GroceryList объекта, вы могли бы назвать AddProduct(productVariableHere) на list объект, который вы создаете.

0

Вы можете сделать свой класс GroceryList товаров.

public class GroceryList 
{ 
    public GroceryList() 
    { 
     Products = new List<Product>(); 
    } 
    public List<Product> Products { get; set; } 
} 

Затем добавляющие продукты могут выглядеть

var bananas = new Product {Name = "banana", Quantity = 2}; 
var list = new GroceryList(); 
list.Products.Add(bananas); 
0

Так как вы заявили, вы изучаете язык:

  1. Вы можете рассмотреть вопрос о добавлении Add() метода на GroceryList класса.
  2. Разоблачение списка, как общественность не звуковой дизайн, потому что кто-то может установить, что нулевое значение или удалять элементы и т.д.
  3. В конкретных случаях, когда нужно, чтобы выставить его, вы можете использовать ReadOnlyCollection.