将继承的类强制转换回基类

本文关键字:转换 基类 继承 | 更新日期: 2023-09-27 18:15:09

如果子类的实例被强制转换回继承的类,那么存储在子类字段中的数据会发生什么?这在内存中是如何工作的呢?

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;
}
}

将继承的类强制转换回基类

强制类型转换只是改变你引用对象的方式。它不改变对象本身。

当对象被强制转换时,子类中的数据不会发生任何变化。唯一的区别是,您只能将对象引用为基类的实例,而实际数据是子类的实例。

如果你只把你的红色汽车称为"汽车",它会不那么红吗?

数据没有发生任何变化——它只是对被强制转换为基类型的对象的使用者不可见。

将派生类型强制转换为基类型并不意味着创建了一个新对象,它只是改变了编译时类型检查,并且可以影响任何运行时类型检查或操作的代码。