2016-06-23 2 views
0

私は本当にC#に新しいです、そして、私は現在、本当に私に意味をなさない課題に取り組んでいます。私は正しい方向にキックが必要です。クラスC#

割り当て:

私はgrocerylistと呼ばれ、コンソールアプリケーションを作成する必要があります。この食料品リストには、GroceryListという名前のクラスが含まれています。このクラスには配列であるインスタンス変数productsが含まれています。

アレイには、製品タイプの項目が含まれています。

クラス製品には、文字列名とint量が属性として含まれています。プロダクトクラスは抽象クラスであり、フレッシュとハーブと呼ばれる2つのサブクラスがあります。

GroceryListにアイテムを追加してリストを表示できることを示す必要があります。

問題は、配列がクラスGroceryListにあり、それに製品を追加できないことです。私は何かが欠けている、私はそれが何ができることができるか何週間か考えて、結果なしで別のソリューションを試してきました。私は、割り当てが間違っているのだろうかと思っています。あなたはそれの内側にList<product>を使用できるように、ニーズを作成し

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クラスは、あなたのコード内でインスタンス化(宣言)するために:これは私がこれまで持っているものです。 fresh1product.freshオブジェクトとして宣言したとおり、オブジェクトをGroceryListとして宣言する必要があります。

したがって、コードの先頭にGroceryList list = new GroceryList()を宣言することができます。次に、GroceryList listproductsフィールドに項目を追加するとします。

これを行うには2通りの方法があります。 1つの方法は、クラス内のlistオブジェクトに直接アクセスすることです。

これを行うには、listフィールドpublicをオブジェクトの外側からアクセスできるようにする必要があります。それを公開として宣言するには、フィールド宣言の前にpublicというキーワードを入れます。

これは必ずしもこれを行うベストプラクティスではありません。追加などの機能については、オブジェクトの外側から直接変更するのではなく、フィールド上でこのような操作を行うようにしてください(methodこの考え方の詳細については、Encapsulationと呼ばれています)。このプログラムで使用できる便利な方法は、AddProductメソッドです。

ここで、このメソッドを実行するには何が必要ですか? オブジェクトをの内部にあるlistに追加します。

したがって、GroceryListオブジェクト内のメソッドを次のように宣言する必要があります。あなたはGroceryListオブジェクトに製品を追加したいとき

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

次に、あなたが作成listオブジェクトにAddProduct(productVariableHere)を呼ぶだろう。

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. あなたはGroceryListクラスにAdd()メソッドを追加することを検討することをお勧めします。
  2. 誰かが、あなたがReadOnlyCollectionを使用することができるがnullまたはあなたがそれを公開する必要があり、非常に特定のシナリオでなどの項目
  3. を削除するように設定することができますので、公共のサウンドデザインではないとして、リストを公開。