正在创建<;派生类>;以存储<;基类>;对象
本文关键字:gt lt 存储 对象 基类 派生 创建 | 更新日期: 2023-09-27 18:26:49
当您创建派生类类型的变量来存储基类对象的变量时,我对这个例子的实际使用有一个问题。
DerivedClass C = new BaseClass();
在什么情况下我可以用这个。
在什么情况下我可以用这个。
你不能。曾经
静态类型的要点是,您可以依赖于与您声明的类型兼容的变量的值。因此,如果您将变量声明为:
DerivedClass C;
则CCD_ 1的任何值必须能够被视为CCD_。特别是,DerivedClass
的所有成员都必须可用。如果该值实际上是对BaseClass
实例的引用,而该实例并不具有所有这些成员,那么情况就不是这样了。
幸运的是,语言规则(因此编译器)明白这将是一件非常糟糕的事情,因此您将得到一个编译时错误。
如果您试图将基类的实例强制转换为派生类的实例,则必须确保第一个实例实际上是使用if (obj is DerivedClass) newInstance = (DerivedClass) obj
的派生类型。
如果你需要一个upcast,你必须实现一种复制方法,使用反射将所有成员从你的基类复制到你的派生类。例如,在这种情况下,你必须为DerivedClass
的每个成员设置某种默认值,而这些成员不是BaseClass
的一部分。但这更像是一次黑客攻击,可能会带来一些危险,因为你可能会创建一些腐败的实例。