编程练习出错

Programming exercise gone wrong

所以我有这个简单的(对其他人来说)练习,我需要创建一个药房并添加这两种药物。我有一个名为 Drugs 的 class,其中包含药物的属性:

public class drugattr
    {
        public int id; 
        public string drugName; 
        public string DrugDesc; 
        public int drugIntensity ;

        public drugattr(int id, string drugName, string DrugDesc, int drugIntensity)
        {
            this.id = id;
            this.drugName= drugName;
            this.DrugDesc = DrugDesc;
            this.drugIntensity = drugIntensity ;
        }
    } 

然后我有一家药房 class,其药房属性为:

 public class pharmacyatrr
    {
        public string PharmacyName; 
        public string PharmacyTown; 
        public List<drugattr> Atrributes= null; // the list with the drugs' attributes 


        public pharmacyatrr(string pharmacyName, string pharmacyTown, List<drugattr> atrributes)
        {
            this.PharmacyName = pharmacyName;
            this.PharmacyTown = pharmacyTown;
            this.Atrributes = atrributes;
        }

我有我的主要 class,我需要在其中创建一个药房并为其分配几种药物。

 public class Program : pharmacyatrr
    {
        public Program(string PharmacyName, string PharmacyTown , List<drugattr> Atrributes) : base(PharmacyName, PharmacyTown , Atrributes)
        {
            this.PharmacyName = pharmacyName;
            this.PharmacyTown = pharmacyTown;
            this.Atrributes = atrributes;

        }

        static void Main(string[] args)
        {   
           drugattr drugA = new drugattr(1, "DrugA_Name", "Very STrong", 20);
            drugattr drugB = new drugattr(2, "DrugB_Name", "Mild Strong", 8);

            pharmacyatrr pharmacy1 = new pharmacyatrr("PharmacyName", "Town", drugA); // the problem is here

        }
    }

因此,如果我尝试添加 drugB,我会得到预期的错误,它只能接受 3 个参数。

如果我创建一个具有相同名称和城镇但使用 drugB 的药房 2 不会创建新药房?

我需要一家药房有多个药品条目...

关于如何解决这个问题的任何提示?我对 C# 和编程还很陌生,所以请不要对我太苛刻!

您需要创建一个药物列表以匹配 pharmacyattr 构造函数中的 List 参数。

创建一个新列表,例如:

List<drugattr> drugList = new List<drugattr>();

并像这样添加到列表中:

drugList.Add(drugA);

然后您可以通过稍微调整以下内容来创建您的药房:

pharmacyatrr pharmacy1 = new pharmacyatrr("PharmacyName", "Town", drugList);

var drugs = new List<drugattr> { drugA, drugB };    
pharmacyatrr pharmacy1 = new pharmacyatrr("PharmacyName", "Town", drugs);

这应该有效。几乎每个人都说了,但只是完整的代码。

毒品Class

class DrugAttribute
    {
        public int id;
        public string drugName;
        public string drugDescription;
        public int drugIntensity;


        public DrugAttribute(int id, string drugName, string drugDescription, int drugIntensity)
        {
            this.id = id;
            this.drugName = drugName;
            this.drugDescription = drugDescription;
            this.drugIntensity = drugIntensity;
        } 
    }

还有药店Class

 class PharmacyAtrribute
    {
        public string pharmacyName;
        public string pharmacyTown;
        public List<DrugAttribute> drugList = null;

        public PharmacyAtrribute(string pharmacyName, string pharmacyTown, List<DrugAttribute> drugList)
        {
            this.pharmacyName = pharmacyName;
            this.pharmacyTown = pharmacyTown;
            this.drugList = new List<DrugAttribute>(drugList);
        }
    }

主要class

class Program : PharmacyAtrribute
    {
        public Program(string pharmacyName, string pharmacyTown, List<DrugAttribute> drugList) : base(pharmacyName, pharmacyTown, drugList)
        {
            this.pharmacyName = pharmacyName;
            this.pharmacyTown = pharmacyTown;
            this.drugList = new List<DrugAttribute>(drugList);
        }

        static void Main(string[] args)
        {
            DrugAttribute drugA = new DrugAttribute(1, "DrugA_Name", "Very Strong", 20);
            DrugAttribute drugB = new DrugAttribute(2, "DrugB_Name", "Mild Strong", 8);

            List<DrugAttribute> listOfDrugs = new List<DrugAttribute>{ drugA, drugB };

            PharmacyAtrribute pharmacy1 = new PharmacyAtrribute("PharmacyName", "Town", listOfDrugs);
        }
    }

我相信您可能已经注意到我更改了一些名称。我将只提供一些有关命名约定的有用提示。对于 Class 名称,Microsoft 鼓励使用 Pascal 大写风格。因此,在您的情况下,drugattr 将是 DrugAttr。对于变量和属性,鼓励使用 Camel Case。所以

public string PharmacyName; 
public string PharmacyTown; 
public List<drugattr> Atrributes= null; 

应该变成

public string pharmacyName; 
public string pharmacyTown; 
public List<drugattr> atrributes= null; 

有关命名约定的更多信息,请查看此 https://msdn.microsoft.com/en-us/library/x2dbyw72(v=vs.71).aspx

关于名称,最好尽可能具有描述性,因此称呼您的 class DrugAttributes 可能是个好主意。即使没有注释,任何正在阅读您的代码的人都会确切地知道它是关于什么的(尽管注释也是必须的)。

即使只是一个简单的学习练习,用常规的方式练习总是好的。