初级铸造(c#)

时间:2010-12-07 11:56:17

标签: c# casting

以下将编译但抛出异常:

public class a
{
    public string foo { get; set; }
}

public class b : a 
{

}

public class test()
{
   void Main()
   {
       b bar = (b)new a();
   }
}

是构建b新实例的唯一选项,然后从a手动复制每个属性/字段吗?

4 个答案:

答案 0 :(得分:3)

问题是a不是b的实例。你所做的基本上是说AnimalDogToolHammer,而实际上它是相反的。

答案 1 :(得分:1)

使用'as': b = new a()as b; 请注意在使用'as'后检查b是否为null。 在你的情况下,你尝试进行upcasting,因为b继承自你的情况不可能。 如果你试图获得polimorfisem,你可以做一个= new b()作为;

答案 2 :(得分:1)

你不能在C#中这样高速播放并期望有效的结果。

如果b添加新成员,则a对象不会突然拥有它们,但是您尝试投射它们。

b添加了buzz()方法。假设你的演员实际上有效。致电bar.buzz()时会发生什么?

答案 3 :(得分:0)

你应该以其他方式使用它(如ChaosPandion所提到的)

 a bar = new b();