我在 c# 9 中遇到了默认实现的问题。这是我的问题。每次我尝试使用默认实现时,都会收到此错误“ToyotaCorolla”不包含“canOffroad”的定义,并且找不到接受“ToyotaCorolla”类型的第一个参数的可访问扩展方法“canOffroad”(你错过了吗? using 指令或程序集引用?) [carApp]
这是界面:
public interface ICar
{
string Model{get;}
PaintColor Paint{get; set;}
string[] Passengers {get;}
void addPassenger(string passenger);
int MaxSpeed{get;}
void drive();
void openDoor();
bool canOffroad => false;
}
这是课程的一部分(没有canOffroad)
public class ToyotaCorolla : ICar
{
public string Model => "Toyota Corolla";
public PaintColor Paint{get; set;}
public string[] passengers = new string[6];
public virtual int MaxSpeed => 190;
public string[] Passengers => passengers;
public void addPassenger(string passenger)
{
bool added = false;
for(int i = 0 ; i < passengers.Length; i ++)
{
if (passengers[i] == null)
{
passengers[i] = passenger;
added = true;
break;
}
}
if (added == false)
{
WriteLine("The passenger could not be added(too many passengers in car)");
}
}
public void drive()
{
WriteLine("The car is driving");
}
public void openDoor()
{
WriteLine("The car door is opening");
}
}
这是导致问题的主要方法的一部分。
static void Main(string[] args)
{
var JeepWrangler = new JeepWrangler();
var corola1 = new ToyotaCorolla();
WriteLine(corolla1.canOffroad);//causes compiler error
WriteLine(JeepWrangler.canOffroad);//works fine(overrides default interface method in class)
}
我查看了许多网站,它看起来与他们的示例完全相同。此外,我知道我正确地将命名空间导入到 main 方法中,因为 corolla1 和 JeepWrangler 类与 ICar 接口位于同一个文件中。
是什么导致了这个问题?