据我所知,我们不能直接将基类转换为派生的(子)类,因为基不是派生的实例,因此将导致null。

我有两个类,一个是从另一个类派生的。我试图弄清楚为什么我可以将baseClass1转换为Sub而不会导致null,而无法将baseClass2转换为Sub,因为它会导致null。

Base baseClass1 = new Sub(); // The result is an instance of Base
Base baseClass2 = new Base(); // Same thing
Sub subClass1 = (Sub)baseClass1; // Doesn't result in null
Sub subClass2 = (Sub)baseClass2; // Does result in null


即使我使用Sub()构造函数,baseClass1还是Base的实例。但是使用Sub()构造函数可以使我将Base实例转换为Sub实例,而不会丢失Sub类额外成员持有的值(假设我在第一个通过Sub()构造函数传递了这些值)线)。

这背后的逻辑是什么?即使BaseClass1和baseClass2都是Base的实例,它们之间的真正区别是什么?

最佳答案

即使我使用Sub()构造函数,baseClass1还是Base的实例。


那是完全不对的。 baseClass1Sub的实例,分配给类型为Base的变量。这就是为什么您可以将其投射回Sub的原因。

关于c# - 从基类到派生类的转换不会导致null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30420100/

10-16 04:20