我有一个简单的结构: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()
执行适当的转换?