gpt4 book ai didi

c# - 永久类型转换到父类(super class)

转载 作者:太空狗 更新时间:2023-10-29 22:24:36 26 4
gpt4 key购买 nike

如果:

class Car : Automobile
{}

我能做到:

Car toyota = new Car();
Automobile tauto = (Automobile)toyota;

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

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

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

最佳答案

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

但是,也没有理由这样做。 Liskov substitution principle表示任何 Car 都应该始终像 Automobile 一样被对待,并且用户的预期行为不应发生任何变化。

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


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

关于c# - 永久类型转换到父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4053636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com