如何创建一个接口类型数组

See*_*ddo 3 c#

我有一个接口Vehicle由两个类实现CarTruck.我如何创建一个包含所有不同类的混合的接口类型数组,并仍然能够访问其成员,并更改它们

public interface Vehicle
{
    double purchase_price();
    string vehicle_type();
    int release_year();
    int purchase_year();
    bool IsOld(int releaseYear, int purchaseYear);
    void Details();

}
Run Code Online (Sandbox Code Playgroud)

在我的主要方法中,我有这个

  var vehls = new Vehicle[]
       {
           new Truck(8, 1000, "Ford", "F15000", 2011, 2016, false),
           new Truck(4, 13000, "Ford", "F-150", 2009, 2014, false),
           new Car("Ford", "Super Duty", 2012, 2017, false),
       };
Run Code Online (Sandbox Code Playgroud)

当我试图访问汽车成员分配他们时,它不允许我.它给了我错误.

   Car c1 = vehls[2];   
   c1.Wheel = 4;
   c1.Miles = 12000;
Run Code Online (Sandbox Code Playgroud)

除非我施放它们:

   Car c1 = (Car) vehls[2];
   c1.Wheel = 4;
   c1.Miles = 12000;
Run Code Online (Sandbox Code Playgroud)

我将如何能够创建这样的数组,以便我仍然能够访问每个类成员和字段,而无需填充构造函数中的所有内容.我不想一直把它扔掉.有没有办法让分配能够自动检测类类型并允许我访问和分配成员?

Bra*_*NET 8

不,没有.

这是使用接口(或基本类)的全部要点,您只能通过接口访问派生类.如果您需要访问权限Wheel,Miles那么这些成员应该是接口的一部分(作为属性).

像你在做的向下倾斜是一个主要的代码味道,而你不能总是避免它,这是一个好的迹象,你做错了方法.