我想通過代理來處理實例,代理是類本身的一個屬性。委託的參數應該始終是實例本身(即使在派生類中也是如此!)。使用派生類類型作爲基類的通用動作的參數
查看下面的代碼。我知道代碼並沒有編譯,因爲我必須投入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操作爲空,您從未分配它,使其變爲虛擬並且編譯器將在派生類中尋找實現 –
@ A.T。相反*表示*屬性被賦值,但該方法使用*基類的*屬性。這不是關於空值,它是關於繼承 –