C#继承将一个子节点转换为另一个子节点

Cha*_*hau 4 c# inheritance casting

我有这个简单的结构:1个父母和两个不同的孩子.

public class Parent{}

public class ChildA : Parent{}

public class ChildB : Parent{}
Run Code Online (Sandbox Code Playgroud)

我有一个ChildA类型的对象objA,我想将它转换为ChildB.我天真的做法说:

ChildA objA = new ChildA();

ChildB objB = (ChildB)objA;
Run Code Online (Sandbox Code Playgroud)

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

此致,卡斯帕

Jon*_*eet 10

这是不可能的,因为对象objA所指的不是 a ChildB.换句话说,这是你要做的事情的一个例子:

 string x = "hi";
 FileStream y = (FileStream) x;
Run Code Online (Sandbox Code Playgroud)

他们都有一个共同的父母 - System.Object但他们是完全不同的阶级.如果您尝试阅读,您会发生y什么?

假设您的ChildB类型具有某个特定于该类型的字段 - 您希望该字段的值在投射后是objA什么?

你为什么要假装a ChildA实际上是一个ChildB?你可以在父类中添加一个你想要的方法吗?ChildA像这样添加一个方法:

ChildB ToChildB()
Run Code Online (Sandbox Code Playgroud)

进行适当的转换?