0

我在 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 接口位于同一个文件中。

是什么导致了这个问题?

4

0 回答 0