c# - 将继承的类转换回基类

标签 c# inheritance memory casting

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

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

最佳答案

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

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

如果您仅将红色汽车称为“汽车”,那么它的红色程度会降低吗?

关于c# - 将继承的类转换回基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16705076/

相关文章:

.net - 在 .NET 中处理大量内存对象

c# - 在C#中,如何获取空白的XML节点值?

c# - SharePoint 代码中的内存泄漏?

java - 为什么要避免使用 final 关键字?

java - 构造函数是否未绑定(bind)到类的实例?

c - fgets/scanf 读取文件没有给出任何值

c# - sendgrid多个收件人c#

c# - 使 WPF ListBox 逗号分隔值

Java 6 Collections.checkedList 适当用法

c++ - sizeof(some pointer) 是否总是等于四?