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)
进行适当的转换?