클래스 자체의 속성 인 대리자를 사용하여 인스턴스를 조작하려고합니다. 델리게이트의 매개 변수는 항상 인스턴스 자체 여야합니다 (파생 클래스에서도!).파생 클래스 형식을 기본 클래스의 일반 동작 매개 변수로 사용
아래 코드를 참조하십시오. Car1을 유형 자동차에 캐스팅해야하기 때문에 코드가 컴파일되지 않는다는 것을 알고 있습니다. 캐스팅하지 않고 솔루션을 찾고 있습니다.
코드
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; }
}
편집 : 변경 코드!
제 질문은 기본 클래스에서이 모든 것을 처리하는 좋은 해결책이 있습니까?하지만 작업에서 캐스팅하지 않고 파생 클래스를 사용하려고합니다.
어디에 문제가 있습니까? 그게 문제라면 모든 클래스 상속을 상속 한 [virtual] (http://stackoverflow.com/q/8309419/1997232) 메서드를 사용할 수 있습니다. – Sinatr
Car.VehicleManipulator 액션은 null입니다. 할당하지 않고 가상으로 만들고 컴파일러는 파생 클래스 –
@ A.T에서 구현을 찾습니다. 반대로 * 속성은 할당되지만 메서드는 * 기본 클래스의 * 속성을 사용합니다. 이것은 NULL에 관한 것이 아니라 상속에 관한 것입니다. –