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

C# 将继承的类强制转换回基类,c#,inheritance,memory,casting,C#,Inheritance,Memory,Casting,如果一个子类的实例被转换回继承的类,那么存储在该子类字段中的数据会发生什么变化?这在记忆中是如何工作的 public abstract class AchievementNode : PrioritizedData { public enum NodeTypes { NONE = 0x0, HEAD = 0x1, TAIL = 0x2, TYPE = 0x4, DATA = 0x8, LEVEL = 0x16, GLO

如果一个子类的实例被转换回继承的类,那么存储在该子类字段中的数据会发生什么变化?这在记忆中是如何工作的

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

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


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


如果您将红色汽车称为唯一的“汽车”,它的红色是否会减少?

施法只是改变您引用对象的方式。它不会改变对象本身


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


如果您仅将红色汽车称为“汽车”,它的红色是否会减少?

数据不会发生任何变化-它只是对已转换为基本类型的对象的使用者不可见


将派生类型强制转换为基类型并不意味着创建新对象,它只会更改编译时类型检查,并会影响执行运行时类型检查或操作的任何代码。

数据不会发生任何变化-只是对已强制转换为基类型的对象的使用者不可见


将派生类型强制转换为基类型并不意味着创建新对象,它只会更改编译时类型检查,并会影响执行运行时类型检查或操作的任何代码。

设置一些测试,请参见设置一些测试,并参阅