转换对象而不是向上转换

时间:2012-07-13 22:39:18

标签: c# casting

是否有可能以不可逆转的方式向上转换对象,从而导致数据丢失。

例如我有两个类:

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强制转换回B类型对象,则属性Length将不存在且为default(int)

2 个答案:

答案 0 :(得分:4)

你不能以这种方式丢失信息。 'b'和'a'引用的对象是同一个对象。类型转换只是从代码的角度影响成员访问。

答案 1 :(得分:3)

当你施放时,你不会改变对象本身。它只是对象的引用类型。

因此,即使引用的类型为A,对象的实际类型仍为B。如果将引用强制转换回B,则对象仍然完好无损,因为它的类型永远不会改变。

就像通过切割马(A)来观察独角兽(B)。即使你没有看到喇叭,它看起来就像一匹马,喇叭仍在那里,当你取下切口时,你会发现它仍然是一只独角兽。 :)

相关问题