Как видно из сообщения об ошибке, базовый класс Vehicle
не имеет конструкторов без аргументов :
public class Vehicle {
...
// every Vehicle constructors want some parameters, e.g. id and ownerId
public Vehicle(int id, int ownerId) {...}
...
}
Это компилятор не знает как создать экземпляр VehicleData
:
// Since VehicleData is inherited from Vehicle,
// Vehicle cosntructor should be executed.
// What arguments should be passed to it?
var test = new VehicleData();
Вам необходимо реализовать VehicleData
конструктор вручную , в котором вы должны указать аргументы:
public class VehicleData : Vehicle
{
// When creating an instace, use -1 and -1 when calling base constructor
public VehicleData() : base(-1, -1) {}
...
}
Теперь приведенный выше код допустимый :
// We don't want parameters when creating VehicleData instance
// When creating base class (Vehicle) -1 and -1 are used
var test = new VehicleData();
Редактировать: Если базовый класс (Vehicle
) не имеет никаких public
или protected
конструкторов (кроме private
), вы не можете создать базовый Vehicle
экземпляр из VehicleData
и, следовательно, не можете наследовать отVehicle
.private
только конструкторы - старый C ++ трюк;в случае C # , чтобы предотвратить наследование , мы должны использовать sealed