我有一个接口Vehicle由两个类实现Car和Truck.我如何创建一个包含所有不同类的混合的接口类型数组,并仍然能够访问其成员,并更改它们
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)
我将如何能够创建这样的数组,以便我仍然能够访问每个类成员和字段,而无需填充构造函数中的所有内容.我不想一直把它扔掉.有没有办法让分配能够自动检测类类型并允许我访问和分配成员?
不,没有.
这是使用接口(或基本类)的全部要点,您只能通过接口访问派生类.如果您需要访问权限Wheel,Miles那么这些成员应该是接口的一部分(作为属性).
像你在做的向下倾斜是一个主要的代码味道,而你不能总是避免它,这是一个好的迹象,你做错了方法.