永久铸造到超类

Son*_*oul 5 c# oop inheritance clone

如果:

class Car : Automobile
{}
Run Code Online (Sandbox Code Playgroud)

我可以:

Car toyota = new Car();
Automobile tauto = (Automobile)toyota;
Run Code Online (Sandbox Code Playgroud)

但如果我这样做tauto.GetType().Name仍然是汽车.

是否可以执行强制转换,以便将类型永久更改为Automobile(无需克隆对象)?

我试图克服的问题是c#中没有多重继承,我需要在一个方法中合并来自2个服务的对象(具有相同的签名),并返回一种类型.

Ree*_*sey 11

没有.如果不构建新的 Automobile对象,就无法做到这一点.

但是,也没有理由这样做.在里氏替换原则说,任何Car应该始终,是可治疗的酷似Automobile,用户应该在预期的行为没有变化.

只要您正确设计类层次结构,使用Caras Automobile应始终是完全可以接受的.


旁注:这是为什么使用Type.GetType()不是检查类型的首选方法的一部分.在C#中使用isas关键字更安全,更好.如果你检查它们,它们将返回true tauto is Car.