0

データの損失を引き起こす不可逆的な方法でオブジェクトをアップキャストすることは可能ですか?

たとえば、次の 2 つのクラスがあります。

public class A
{
    public string Name { get; set; }
}

public class B : A
{
    public int Length { get; set; }
}

そして、この簡単なコード:

var b = new B {Length = 10, Name = "B Object"};

var a = b as A;

タイプオブジェクトにキャストaバックすると、プロパティが存在せず、BLengthdefault(int)

4

2 に答える 2

4

この方法で情報を失うことはありません。「b」と「a」の両方が参照するオブジェクトは同じオブジェクトです。型キャストは、コードの観点からメンバー アクセスに影響を与えるだけです。

于 2012-07-13T22:43:58.387 に答える
3

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

したがって、参照の型が であってもA、オブジェクトの実際の型は依然としてBです。オブジェクトへの参照をキャストしてBも、その型は変更されていないため、オブジェクトはそのままです。

馬 (A) の切り抜きを通してユニコーン (B) を見ているようなものです。角が見えなくてただの馬のように見えても、角はまだそこにあり、カットアウトを外すとユニコーンであることがわかります. :)

于 2012-07-13T22:44:53.800 に答える