如果:
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#中使用is和as关键字更安全,更好。如果您检查tauto is Car
,它们将返回true。