Я хочу манипулировать экземпляром делегатом, который является свойством самого класса. Параметр делегата должен всегда быть самим экземпляром (даже в производных классах!).Использовать производный тип класса как параметр общего действия базового класса
См. Код ниже. Я знаю, что код не компилируется, потому что мне приходится бросать автомобиль1 на автомобиль, я ищу решение без кастинга.
Код
static void Main(string[] args)
{
var car = new Car();
car.VehicleManipulator = car1 => car1.SomeInt++;
car.ManipulateVehicle();
Console.WriteLine("end");
Console.ReadLine();
}
internal class Vehicle
{
public Action<Vehicle> VehicleManipulator { get; set; }
public void ManipulateVehicle()
{
this.VehicleManipulator(this);
}
}
internal class Car : Vehicle
{
public int SomeInt { get; set; }
}
EDIT: Измененный код!
Мой вопрос в том, есть ли хорошее решение для обработки всего этого только в базовом классе, но в действии я хочу использовать производные классы без кастинга.
Где проблема? Вы можете использовать метод [virtual] (http://stackoverflow.com/q/8309419/1997232), который весь унаследованный класс переопределяет, если это проблема. – Sinatr
Действие Car.VehicleManipulator равно null, вы никогда не назначали его, делаете его виртуальным, а компилятор будет искать реализацию в производных классах –
@ A.T. напротив * свойство * присваивается, но метод использует свойство * базового класса *. Это не касается нулей, это о наследовании –