1

子クラスのインスタンスが継承されたクラスにキャストバックされた場合、子クラスのフィールドに格納されたデータはどうなりますか? そして、これはメモリ内でどのように機能しますか?

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

2 に答える 2

8

キャストは、オブジェクトの参照方法を変更するだけです。オブジェクト自体は変更されません。

オブジェクトがキャストされるとき、子クラスのデータには何も起こりません。唯一の違いは、オブジェクトを基本クラスのインスタンスとしてのみ参照できることですが、実際のデータは子クラスのものです。

あなたの赤い車を単に「車」と呼ぶなら、それは赤くないですか?

于 2013-05-23T03:20:12.913 に答える
3

データには何も起こりません。基本型にキャストされたオブジェクトのコンシューマには表示されません。

派生型を基本型にキャストしても、新しいオブジェクトが作成されるわけではなく、コンパイル時の型チェックが変更されるだけで、実行時の型チェックまたは操作を行うコードに影響を与える可能性があります。

于 2013-05-23T03:21:12.263 に答える