C# 子类看不到父方法

C# 子类看不到父方法,c#,list,inheritance,C#,List,Inheritance,我必须做一个测试,我主要通过了MCQ部分,但我的编码部分不起作用,因为我们的老师不太热衷于给出反馈,我希望了解我的错误并从中改进。解释注释在代码中 在课堂教学中,我犯了两个错误,三个,但一个和另一个一样。 与Console.WriteLineCommission对应的行中为:,item.calculateCommission;我得到: CS1061“double”不包含“CalculateCommission”的定义,并且找不到接受类型为“double”的第一个参数的扩展方法“Calculate

我必须做一个测试,我主要通过了MCQ部分,但我的编码部分不起作用,因为我们的老师不太热衷于给出反馈,我希望了解我的错误并从中改进。解释注释在代码中

在课堂教学中,我犯了两个错误,三个,但一个和另一个一样。 与Console.WriteLineCommission对应的行中为:,item.calculateCommission;我得到: CS1061“double”不包含“CalculateCommission”的定义,并且找不到接受类型为“double”的第一个参数的扩展方法“CalculateCommission”。是否缺少using指令或程序集引用

与GetCheapestResidencePartments保持一致;我得到: CS1503:参数1:无法从“System.Collections.Generic.List”转换为“System.Collections.Generic.List”


要回答第一个问题,请注意错误的措辞:CS1061“double”不包含“CalculateCommission”的定义。此错误表示您有一个类型为double的变量,您正试图对其调用CalculateCommission。错误发生在以下位置:

var item = list.Min(x => x.Price);
Console.WriteLine("Commission is: ", item.CalculateComission);
请注意,您没有指定项的类型,而只是说了var项。发生错误的原因是Min函数返回给定的最小值。在本例中,您为函数提供了一个价格列表。因此,item变量实际上是double类型,而不是Residence。因此,您尝试在一个号码上调用CalculateCommission,而不是在住宅上调用它

要回答第二个问题,您不能仅使用列表作为列表。请注意以下固定代码:

//a list of residences instead of a list of apartments
List<Residence> apartments = new List<Residence>(); 

//Because Apartment is a Residence, you can make these variables Apartment or Residence
Apartment ap1 = new Apartment(101, 1, 1, 1, 1100); 
Residence ap2 = new Apartment(102, 2, 2, 1, 1500);
Apartment ap3 = new Apartment(103, 3, 3, 2, 1900);

apartments.Add(ap1);
apartments.Add(ap2);
apartments.Add(ap3);

//This time the function call is valid because GetCheapestResidance() expects a                 
List<Residence>
//and that is what we are passing in
GetCheapestResidance(apartments);

因为您的公寓类扩展了住宅,所以您只需创建一个列表作为公寓列表,并像往常一样将公寓添加到其中。这将解决将列表传递到需要列表的函数中的问题。

要回答第一个问题,请注意错误的措辞:CS1061“double”不包含“CalculateCommission”的定义。此错误表示您有一个类型为double的变量,您正试图对其调用CalculateCommission。错误发生在以下位置:

var item = list.Min(x => x.Price);
Console.WriteLine("Commission is: ", item.CalculateComission);
请注意,您没有指定项的类型,而只是说了var项。发生错误的原因是Min函数返回给定的最小值。在本例中,您为函数提供了一个价格列表。因此,item变量实际上是double类型,而不是Residence。因此,您尝试在一个号码上调用CalculateCommission,而不是在住宅上调用它

要回答第二个问题,您不能仅使用列表作为列表。请注意以下固定代码:

//a list of residences instead of a list of apartments
List<Residence> apartments = new List<Residence>(); 

//Because Apartment is a Residence, you can make these variables Apartment or Residence
Apartment ap1 = new Apartment(101, 1, 1, 1, 1100); 
Residence ap2 = new Apartment(102, 2, 2, 1, 1500);
Apartment ap3 = new Apartment(103, 3, 3, 2, 1900);

apartments.Add(ap1);
apartments.Add(ap2);
apartments.Add(ap3);

//This time the function call is valid because GetCheapestResidance() expects a                 
List<Residence>
//and that is what we are passing in
GetCheapestResidance(apartments);

因为您的公寓类扩展了住宅,所以您只需创建一个列表作为公寓列表,并像往常一样将公寓添加到其中。这将解决将列表传递到需要列表的函数中的问题。

对于第一个错误,请尝试用+而不是逗号连接参数,并在item.calculateCommission的末尾添加括号,以实际获得函数的结果。但主要的问题是,你调用的是一个双精度函数,而不是一个对象。您可以更改Min调用以执行类似list.OrderByx=>x.Price.FirstOrDefault的操作,以获得价格最低的住宅并将其返回。
对于第二个错误,请尝试将公寓列表更改为居民列表,看看这是否有帮助。参数不接受您要传递的类型,但您应该能够将单元实例添加到驻留列表中。

对于第一个错误,请尝试用+而不是逗号连接参数,并在item.calculateCommission的末尾添加括号,以实际获得函数的结果。但主要的问题是,你调用的是一个双精度函数,而不是一个对象。您可以更改Min调用以执行类似list.OrderByx=>x.Price.FirstOrDefault的操作,以获得价格最低的住宅并将其返回。 对于第二个错误,请尝试将公寓列表更改为居民列表,看看这是否有帮助。参数不接受您要传递的类型,但您应该能够将公寓实例添加到住宅列表中。

所有好问题

我一次看一个:

double的错误是因为您的var item=list.Min。。。在遍历列表后返回最小值。它返回它找到的价格的最小值,而不是拥有该价格的对象

要解决此问题,可以使用.Aggregate函数。这有点复杂,所以我建议你看看这篇文章的全部细节: . 另一种方法是使用简单的for或foreach循环,并在迭代过程中跟踪最低值及其所有者

GetCheapestResidence方法之所以抱怨,是因为它需要一个住宅列表,而您需要提供一个公寓列表。你 不幸的是,无法将这些列表相互区分,我认为这是列表的一个限制,如果有人知道为什么,请在下面进行评论。因此,您必须在此处提供正确的列表类型。您已经创建了住宅引用的新公寓,那么为什么不将这些住宅合并到自己的列表中呢

     List<House> houses = new List<House>();
     List<Residence> apartments = new List<Residence>();

     //Create three house objects  and three apartment object with data of your choice. 
     //Then add them to the the above lists.

     Residence ap1 = new Apartment(101, 1, 1, 1, 1100);
     Residence ap2 = new Apartment(102, 2, 2, 1, 1500);
     Residence ap3 = new Apartment(103, 3, 3, 2, 1900);

     Residence hs1 = new House(1, false, 2, 1, 1500);
     Residence hs2 = new House(1, true, 3, 1, 1900);
     Residence hs3 = new House(2, true, 4, 1, 2300);

     apartments.Add(ap1);
     apartments.Add(ap2);
     apartments.Add(ap3);

     houses.Add((House)hs1);
     houses.Add((House)hs2);
     houses.Add((House)hs3);

     //Invoke GetCheapestResidance method by passing either houses list OR department list

     GetCheapestResidance(apartments);
在这里,我已将您的列表更改为列表,因为按照您当前的代码,您没有使用公寓列表。房屋也是如此

如果有人对此有更好的解决方案,请随意评论或编辑。

所有好问题

我一次看一个:

double的错误是因为您的var item=list.Min。。。在遍历列表后返回最小值。它返回它找到的价格的最小值,而不是拥有该价格的对象

要解决此问题,可以使用.Aggregate函数。这有点复杂,所以我建议你看看这篇文章的全部细节: . 另一种方法是使用简单的for或foreach循环,并在迭代过程中跟踪最低值及其所有者

GetCheapestResidence方法之所以抱怨,是因为它需要一个住宅列表,而您需要提供一个公寓列表。不幸的是,你不能将这些列表相互区分,我认为这是列表的一个限制,如果有人知道为什么,请在下面发表评论。因此,您必须在此处提供正确的列表类型。您已经创建了住宅引用的新公寓,那么为什么不将这些住宅合并到自己的列表中呢

     List<House> houses = new List<House>();
     List<Residence> apartments = new List<Residence>();

     //Create three house objects  and three apartment object with data of your choice. 
     //Then add them to the the above lists.

     Residence ap1 = new Apartment(101, 1, 1, 1, 1100);
     Residence ap2 = new Apartment(102, 2, 2, 1, 1500);
     Residence ap3 = new Apartment(103, 3, 3, 2, 1900);

     Residence hs1 = new House(1, false, 2, 1, 1500);
     Residence hs2 = new House(1, true, 3, 1, 1900);
     Residence hs3 = new House(2, true, 4, 1, 2300);

     apartments.Add(ap1);
     apartments.Add(ap2);
     apartments.Add(ap3);

     houses.Add((House)hs1);
     houses.Add((House)hs2);
     houses.Add((House)hs3);

     //Invoke GetCheapestResidance method by passing either houses list OR department list

     GetCheapestResidance(apartments);
在这里,我已将您的列表更改为列表,因为按照您当前的代码,您没有使用公寓列表。房屋也是如此


如果有人对此有更好的解决方案,请随意评论或编辑。

错误消息表明您的代码中有double.caclulateCommission或double\u var.calculateCommission错误消息表明您的代码中有double.caclulateCommission或double\u var.calculateCommission
     List<House> houses = new List<House>();
     List<Residence> apartments = new List<Residence>();

     //Create three house objects  and three apartment object with data of your choice. 
     //Then add them to the the above lists.

     Residence ap1 = new Apartment(101, 1, 1, 1, 1100);
     Residence ap2 = new Apartment(102, 2, 2, 1, 1500);
     Residence ap3 = new Apartment(103, 3, 3, 2, 1900);

     Residence hs1 = new House(1, false, 2, 1, 1500);
     Residence hs2 = new House(1, true, 3, 1, 1900);
     Residence hs3 = new House(2, true, 4, 1, 2300);

     apartments.Add(ap1);
     apartments.Add(ap2);
     apartments.Add(ap3);

     houses.Add((House)hs1);
     houses.Add((House)hs2);
     houses.Add((House)hs3);

     //Invoke GetCheapestResidance method by passing either houses list OR department list

     GetCheapestResidance(apartments);