0

是否可以以不可逆的方式向上转换对象,这会导致数据丢失。

例如我有两个类:

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)

4

2 回答 2

4

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

于 2012-07-13T22:43:58.387 回答
3

施放时,您不会更改对象本身。只是对对象的引用类型发生了变化。

因此,即使引用的A类型是 ,对象的实际类型仍然是B。如果将引用转换回B对象仍然是完整的,因为它的类型从未改变。

这就像通过马 (A) 的剪影看独角兽 (B)。即使你没有看到角,它看起来只是一匹马,但角仍然存在,当你移除切口时,你会看到它仍然是一只独角兽。:)

于 2012-07-13T22:44:53.800 回答