Я пытаюсь получить множественное наследование во время выполнения, используя интерфейс impromptu, но я застреваю, когда хочу передать объект вместе с методом.Runtime множественное наследование с impromptu-интерфейсом
public interface IEngine {
void Foo();
}
public interface IWheels {
void Foo();
}
public interface IChassie {
void Foo();
}
public interface IPaintShop {
void PaintWheels(IWheels wheels);
void PaintChassie(IChassie chassie);
void ChromeEngine(IEngine engine);
}
var paintShop = Impromptu.ActLike<IPaintShop>();
var car = Impromptu.ActLike(new [] {typeof(IEngine), typeof(IWheels), typeof(IChassie) });
// dynamic car = Impromptu.ActLike(new [] {typeof(IEngine), typeof(IWheels), typeof(IChassie) }); // Same error
paintShop.PaintWheels(car); // RuntimeException as car is dynamic and not the expected IWheels
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Лучший перегружен матч метод 'MyStuff.PaintWheels (IWheels)' имеет некоторые недопустимые аргументы
Я пытался бросить но получить InvalidCastException
:
paintShop.PaintWheels((IWheels)car);
System.InvalidCastException: невозможно выполнить объект типа 'ImpromptuInterface.ActLikeCaster' для ввода 'MyStuff.IWheels'.
Следующие работы, но я не уверен, что это правильный путь; представляется неоправданным преобразовать автомобиль IWheels
когда IWheels
интерфейс уже должен быть унаследован:
var wheels = Impromptu.CoerceConvert(car, typeof (IWheels));
paintShop.PaintWheels(wheels);
Что такое правильный способ достижения выполнения множественного наследования с помощью импровизированного-интерфейс?
Что делает 'ICar' определение интерфейса выглядит? – AGB
@AGB Я добавил его сейчас. В этом примере не так много. –
Вы имеете в виду, что 'IEngine',' IWheels' и 'IChassie' не связаны? Вы упомянули, что они должны быть унаследованы в вашем посте, но, как написано, они не наследуют друг от друга вообще. – AGB