创建<derived class =“”>类型的变量以在C#</derived>中存储<base class =“”/>对象

时间:2014-10-16 11:52:49

标签: c# inheritance

当你创建一个类型派生类的变量来存储基类对象的变量时,我有一个关于这个例子的实际用法的问题。

DerivedClass C = new BaseClass(); 

在什么情况下我可以使用它。

2 个答案:

答案 0 :(得分:2)

  

在什么情况下我可以使用它。

你不能。如初。

静态类型的要点是,您可以依赖与您声明的类型兼容的变量的值。因此,如果您将变量声明为:

DerivedClass C;

然后C的任何值都必须能够被视为DerivedClass。特别是DerivedClass的所有成员都必须可用。如果该值实际上是对BaseClass的实例的引用,并不是所有这些成员,则根本不会出现这种情况。

幸运的是,语言规则(以及编译器)理解这将是一件非常糟糕的事情,因此您将收到编译时错误。

答案 1 :(得分:0)

如果您尝试将基类的实例强制转换为派生类的实例,则必须确保第一个实际上是使用if (obj is DerivedClass) newInstance = (DerivedClass) obj的派生类型。

如果你需要一个upcast,你必须实现一种复制方法,使用反射将所有成员从你的基类复制到派生类。在这种情况下,您必须为不属于DerivedClass的{​​{1}}的每个成员设置某种默认值。但这更像是一个黑客,可能带来一些危险,因为你可能会创建一些腐败的实例。