编程练习出错
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
可能是个好主意。即使没有注释,任何正在阅读您的代码的人都会确切地知道它是关于什么的(尽管注释也是必须的)。
即使只是一个简单的学习练习,用常规的方式练习总是好的。
所以我有这个简单的(对其他人来说)练习,我需要创建一个药房并添加这两种药物。我有一个名为 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
可能是个好主意。即使没有注释,任何正在阅读您的代码的人都会确切地知道它是关于什么的(尽管注释也是必须的)。
即使只是一个简单的学习练习,用常规的方式练习总是好的。