类C#中的数组

时间:2016-06-23 21:26:50

标签: c# arrays class

我是C#的新手,我目前正致力于一项对我来说没有意义的任务。我需要朝正确的方向迈进。

作业:

我需要创建一个名为grocerylist的控制台应用程序。此购物清单包含一个名为GroceryList的类。此类包含一个实例变量产品,它是一个数组。

该数组包含product类型的项目。

类产品具有字符串名称和int数量作为属性。产品类是抽象的,有2个子类叫做fresh和herbs。

我需要证明我可以将项目添加到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
        {

        }
    }

}

3 个答案:

答案 0 :(得分:1)

您创建的GroceryList类需要在代码中实例化(声明),以便您可以在其中使用List<product>。正如您将fresh1声明为product.fresh对象一样,您必须将对象声明为GroceryList

因此,您可以在代码的开头声明GroceryList list = new GroceryList()。然后,您需要将商品添加到products的{​​{1}}字段中。

有两种方法可以做到这一点。一种方法是直接访问类内的GroceryList list对象。

为此,您需要创建list字段list,以便可以从对象外部访问它。要将其声明为公开,请在字段声明的前面加上public关键字。

这不一定是这样做的最佳实践,就像添加这样的函数一样,最好有一个明确的public在字段上执行这样的操作,而不是直接从对象外部修改它们(如果您想了解有关此想法的更多信息,请将其称为Encapsulation。)您可以使用此方案的有用方法是method方法。

现在,我们需要这种方法做什么?将AddProduct对象添加到我们product内的list

因此,我们需要在GroceryList对象内部声明方法,如下所示。

GroceryList

然后,当您想要将产品添加到public void AddProduct(product productToAdd) { products.Add(productToAdd); } 对象时,您可以在您创建的GroceryList对象上调用AddProduct(productVariableHere)

答案 1 :(得分: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);  

答案 2 :(得分:0)

既然你说你正在学习这门语言:

  1. 您可以考虑在Add()类上添加GroceryList方法。
  2. 将列表公开为公共不是一个合理的设计,因为有人可以将其设置为null或删除项目等。
  3. 在需要公开它的特定场景中,您可以使用ReadOnlyCollection