クラス自体のプロパティであるデリゲートによってインスタンスを操作したいと思います。デリゲートのパラメータは常にインスタンス自体でなければなりません(派生クラスでも!)。基本クラスのジェネリックアクションのパラメータとして派生クラス型を使用
以下のコードを参照してください。私はcar1をcar型にキャストしなければならないため、コードがコンパイルされていないことを知っています。キャストせずに解決策を探しています。
コード
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.VicleManipulatorのアクションはnullです。あなたはそれを割り当てずに仮想化し、コンパイラは派生クラス –
@ A.Tの実装を探します。逆に、*プロパティは割り当てられますが、メソッドは*基本クラスの*プロパティを使用します。これはヌルではなく、継承に関するものです。 –