如果:

class Car : Automobile
{}

我可以:
Car toyota = new Car();
Automobile tauto = (Automobile)toyota;

但是,如果我执行tauto.GetType().Name,它将仍然是汽车

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

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

最佳答案

不可以。没有构造新的Automobile对象就无法做到这一点。

但是,也没有理由这样做。 Liskov substitution principle表示,任何Car都应始终像Automobile一样可治疗,并且用户的预期行为不应有任何改变。

只要正确地设计了类层次结构,使用Car作为Automobile始终是完全可以接受的。

附带说明:这就是为什么Type.GetType()不是检查类型的首选方法的部分原因。在C#中使用isas关键字更安全,更好。如果您检查tauto is Car,它们将返回true。

09-26 06:25