【问题标题】:C# displaying objects in List from a different class in MainC# 在 List 中显示来自 Main 中不同类的对象
【发布时间】:2017-01-19 09:03:44
【问题描述】:

我正在尝试将列表中的项目打印到控制台,但我不确定我是否遗漏了一些明显的东西,但我不知道该怎么做才能实现这一点。我第一学期的编程课基本上什么都没教,我一直在自学零碎,所以我对如何做很多事情一无所知。任何帮助将不胜感激。

public class VendingMachine
{
    public List<Snack> snax = new List<Snack>();
    public List<Drink> drinx = new List<Drink>();

    public void displayInventory()
    {
        foreach (Snack s in snax)
        {
            Console.WriteLine("test");
            Console.WriteLine(s.ToString());
        }

        Console.WriteLine("\n");

        foreach (Drink d in drinx)
        {
            Console.WriteLine(d.ToString());
        }
    }
}

public abstract class Items
{
    public string name;
    public int calories;

    public Items(string name, int calories)
    {
        this.name = name;
        this.calories = calories;
    }

    public override string ToString()
    {
        return (name + "    " + calories);
    }
}

public class Drink : Items
{
    int flOz;

    public Drink(string name, int calories, int flOz) : base(name, calories)
    {
        this.name = name;
        this.calories = calories;
        this.flOz = flOz;
    }
}

public class Snack : Items
{
    int oz;

    public Snack(string name, int calories, int oz) : base(name, calories)
    {
        this.name = name;
        this.calories = calories;
        this.oz = oz;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        VendingMachine Vend1 = new VendingMachine();

        Vend1.snax.Add(new Snack("Cookies", 125, 8));
        Vend1.snax.Add(new Snack("Chips", 100, 8));
        Vend1.snax.Add(new Snack("Nuts & Berries", 80, 8));

        Vend1.drinx.Add(new Drink("Soda", 180, 12));
        Vend1.drinx.Add(new Drink("Water", 0, 12));
        Vend1.drinx.Add(new Drink("Juice", 90, 12));

        var invoke = new VendingMachine();
        invoke.displayInventory();
    }
}

}


更新

我得到了要打印的列表,但我需要知道如何不仅打印项目和卡路里,还需要知道如何打印继承类中的 oz/flOz。我该怎么做?我查看了作业,它说要调整 to 字符串覆盖,但我不知道该放什么。

public class Program
{
    public static void Main(string[] args)
    {
        VendingMachine Vend1 = new VendingMachine();

        Vend1.snax.Add(new Snack("Cookies", 125, 8));
        Vend1.snax.Add(new Snack("Chips", 100, 8));
        Vend1.snax.Add(new Snack("Nuts", 80, 8));

        Vend1.drinx.Add(new Drink("Soda", 180, 12));
        Vend1.drinx.Add(new Drink("Water", 0, 12));
        Vend1.drinx.Add(new Drink("Juice", 90, 12));

        Vend1.displayInventory();
    }
}

【问题讨论】:

  • 我尝试过 Console.Write(Vend1);但它只是打印命名空间
  • Vend1.displayInventory() 应该打印所有零食和饮料的名称和名称。它不起作用吗?打印变量 Vend1 将调用 Vend1.ToString() 并打印它。如果 ToString 没有被覆盖,那么默认的实现是命名空间和类。
  • @Rahul 这就是我写的。
  • @JustinL - 请不要编辑您的问题以使现有答案无效。我已经修复了编辑,所以它应该对每个人都更有意义。你能检查一下吗?以后还能用这种风格的更新吗?
  • 对不起,我以后会更新的,我不是故意要迷惑人的

标签: c# list class inheritance


【解决方案1】:

为了输出ozflOz,并符合要求,您需要在DrinkSnack中覆盖.ToString()

public class Drink : Items
{
    int flOz;

    public Drink(string name, int calories, int flOz) : base(name, calories)
    {
        this.name = name;
        this.calories = calories;
        this.flOz = flOz;
    }

    public override string ToString()
    {
        return base.ToString() + "    " + this.flOz;
    }
}

public class Snack : Items
{
    int oz;

    public Snack(string name, int calories, int oz) : base(name, calories)
    {
        this.name = name;
        this.calories = calories;
        this.oz = oz;
    }

    public override string ToString()
    {
        return base.ToString() + "    " + this.oz;
    }
}

【讨论】:

    【解决方案2】:

    在您的 Main() 函数中,您正在将库存添加到名为 Vend1 的对象中,但随后您将创建第二个名为 invokeVendingMachine 对象并使用 invoke.displayInventory() 显示它的库存(而不是显示Vend1Vend1.displayInventory() 的库存)。

    如果你想查看你添加到 Vend1 的库存,这个 sn-p

    VendingMachine invoke = new VendingMachine();
    invoke.displayInventory();
    

    应该阅读

    //VendingMachine invoke = new VendingMachine();
    // ...or you could add items to the invoke object and display them instead
    //invoke.displayInventory();
    
    Vend1.displayInventory();
    

    希望这会有所帮助!

    【讨论】:

    • 是的,这很有帮助,我不知道为什么我没有想到这一点。我是一个全新的人,有时会过度思考非常简单的事情:)
    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 2011-09-13
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多