【发布时间】:2016-08-19 10:05:53
【问题描述】:
我想通过委托来操作一个实例,这是类本身的一个属性。委托的参数应该始终是实例本身(即使在派生类中!)。
见下面的代码。我知道代码没有编译,因为我必须将 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; }
}
编辑: 更改代码!
我的问题是,是否有一个很好的解决方案可以仅在基类中处理所有这些问题,但在操作中我想使用派生类而不进行强制转换。
【问题讨论】:
-
哪里出了问题?如果这是问题,您可以使用所有继承的类覆盖的virtual 方法。
-
Car.VehicleManipulator 操作为空,您从未分配过它,将其设为虚拟,编译器将在派生类中寻找实现
-
@A.T.相反, that 属性被赋值,但该方法使用 基类的 属性。这不是关于空值,而是关于继承
-
@Snowcrack - 仅删除派生中的属性就不会进行强制转换。这首先是继承的想法——你在那个基类上添加了更多。为什么要在派生中使用另一个具有相同类型和名称的属性?
-
您在派生类中重新引入了
VehicleManipulator,这是故意的吗?你知道这样做的效果吗?
标签: c# generics inheritance action