краткое описание моей проблемы.Я передал универсальный объект (интерфейс) в качестве параметра для моего метода.Мне нужно вызвать некоторый метод, который будет общим для подмножества объектов, которые реализуют мой интерфейс.Я не хочу "иметь if () тогда" для каждого типа объекта там.давайте назовем интерфейс IVehicles.
public interface IVehicle
{
Object SomeValue { get; }
}
public class Car : IVehicle{ //some code here}
Нет смысла добавлять метод в IVehicle, поскольку не разделяют всю логику.
Мне нужно вызывать SomePersonalValue только для подмножества IVehicle.Поэтому я реализовал другой интерфейс IPersonalVehicle и расширил свои объекты:
public interface IPersonalVehicle
{
long SomePersonalValue { get; }
}
public class Car : IVehicle, IPersonalVehicle {}
public class MotorBike : IVehicle, IPersonalVehicle {}
Теперь у меня есть мой метод
public void Call(IVehicle vehicle)
{
Object someIrrelevantObject = vehicle.SomeValue;
//here my change begins
IPersonalVehicle personalVehicle = (IPersonalVehicle)vehicle;
long somePersonalValue = personalVehicle.SomePersonalValue;
}
, проблема в том, что он вызывает Unable для приведения объекта Car к интерфейсу IPersonalVehicle.IЯ также пытался расширить свой интерфейс с помощью IVehicles, и resilt такой же.
public interface IPersonalVehiclee : IVehiclee
{
long SomePersonalValue { get; }
}
Что я делаю не так?
РЕДАКТИРОВАТЬ - РЕШЕНО Я забыл или как-топотерял в редактировании кода, чтобы расширить мой автомобиль и мотоцикл с помощью IPersonalVehicle LOL, так что это решение работает!Спасибо, в любом случае!