是否有可能以不可逆转的方式向上转换对象,从而导致数据丢失。
例如我有两个类:
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)
答案 0 :(得分:4)
你不能以这种方式丢失信息。 'b'和'a'引用的对象是同一个对象。类型转换只是从代码的角度影响成员访问。
答案 1 :(得分:3)
当你施放时,你不会改变对象本身。它只是对象的引用类型。
因此,即使引用的类型为A
,对象的实际类型仍为B
。如果将引用强制转换回B
,则对象仍然完好无损,因为它的类型永远不会改变。
就像通过切割马(A)来观察独角兽(B)。即使你没有看到喇叭,它看起来就像一匹马,喇叭仍在那里,当你取下切口时,你会发现它仍然是一只独角兽。 :)