我有一个简单的结构:1个 parent ,两个不同的 child 。

public class Parent{}

public class ChildA : Parent{}

public class ChildB : Parent{}

我有一个类型为ChildA的对象objA,我想将其强制转换为ChildB。我的幼稚方法说:
ChildA objA = new ChildA();

ChildB objB = (ChildB)objA;

但这不是直接可能的-为什么?这是因为我需要实现某些功能还是因为我的幼稚方法是错误的?

问候,卡斯珀

最佳答案

这是不可能的,因为objA所引用的对象不是ChildB。换句话说,这是您尝试执行的操作的示例:

 string x = "hi";
 FileStream y = (FileStream) x;

它们都有一个共同的父类-System.Object-但它们是完全不同的类。如果您尝试从y进行读取,您会期望发生什么?

假设您的ChildB类型具有某个特定于该类型的字段-在转换objA之后,您希望该字段的值是多少?

为什么要假装ChildA实际上是ChildB?您能否在父类中添加您想要的方法?在ChildA中添加这样的方法:
ChildB ToChildB()

执行适当的转换?

10-05 21:07