如果子类的实例被转换为继承的类,那么存储在子类的字段中的数据会发生什么?这如何在记忆中发挥作用?
public abstract class AchievementNode : PrioritizedData
{
public enum NodeTypes
{
NONE = 0x0,
HEAD = 0x1,
TAIL = 0x2,
TYPE = 0x4,
DATA = 0x8,
LEVEL = 0x16,
GLOBAL = 0x32
}
public NodeTypes nodeType;
public virtual AchievementNode Init(NodeTypes type, params int[] enumData)
{
nodeType = type;
return this;
}
}
public class AchievementTypeNode : AchievementNode
{
public enum AchievementTypes {TIME,COMPLETION,UNLOCK,SOCIAL,ACTION};
public AchievementTypes AchievementType;
public override AchievementNode Init(AchievementNode.NodeTypes type)
{
base.Init(type);
return (AchievementNode)this;
}
}
答案 0 :(得分:7)
转换只是改变了引用对象的方式。它不会改变对象本身。
对象投射时子类中的数据没有任何反应。唯一的区别是您只能将对象称为基类的实例,但实际数据是子类的数据。
如果你把你的红色汽车称为“汽车”,那么它是不是更红?
答案 1 :(得分:3)
数据没有任何反应 - 对于已转换为基类型的对象的消费者而言,它是不可见的。
将派生类型转换为基类型并不意味着创建了新对象,它只是更改了编译时类型检查,并且可以影响您运行时类型检查或操作的任何代码。