试图学习进入死胡同 类

Hit a dead-end trying to learn classes

我的秋季学期将包括使用 c#,所以我正在尽我所能。我想做的第一件事是了解抽象 classes,但我在使我的代码工作时遇到了问题。这是一个 "item" class,并且有 3 个 .cs 文件,包括主项目 class。

这是摘要class。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp6
{
    abstract public class item
    {
        public abstract string prodName { set; }

        public abstract int amount();
    }
}

这是子class。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp6
{
    public class ProteinPowder : item // Says it doesn't implement anything.
    {
        private string name;
        private int itemAmount;

        public proPowder(string name, int amount) // Is this correct?
        {
            this.name = name;
            this.itemAmount = amount;
        }

        public string Name { set => name = value; }
        public int Amount { set => itemAmount = value; }
    }
}

主项目目前是空的。我认为可以通过正确实施 ProteinPowder 来解决这些问题,但我无法让它发挥作用。有人可以指出我做错了什么吗?

** 编辑 ***

这样好看吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp6
{
    public class ProteinPowder : item
    {
        private string name;
        private int itemAmount;

        public ProteinPowder(string name, int amount)
        {
            this.name = name;
            this.itemAmount = amount;
        }

        public int Amount { set => itemAmount = value; }
        public override string prodName { set => throw new NotImplementedException(); }

        public override int amount()
        {
            throw new NotImplementedException();
        }
    }
}

摘要class简而言之就是"anything that implements me must provide an implementation for all abstract properties/methods i have"。

在您的例子中,item 有 2 个抽象项目。 prodNameamount.

这意味着在您的 ProteinPowder class 中,您需要实现这些,例如

public override string prodName { set => /*do something specific for ProteinPowder*/}

public override int amount()
{
    // do something specific for ProteinPowder
}

你提出的关于 public proPowder(string name, int amount) // Is this correct? 的第二件事,答案是否定的。

我假设这是构造函数,因为缺少 return 类型。构造函数必须与 class 的名称相匹配,因此应为

public ProteinPowder(string name, int amount)