以下演员表不起作用。我认为应该,你能解释一下为什么不呢? WebserviceErrorMessage
和BTMacResponse
都继承自WebserviceMessage
类
DataLayer.WebserviceMessage msg = new Service.WebserviceErrorMessage(ex) ;
DataLayer.BTMacResponse macrsp = (DataLayer.BTMacResponse)msg;
答案 0 :(得分:4)
除非WebserviceErrorMessage
继承自BTMacResponse
,否则我不明白为什么这应该有效。当对象只是不是 a BTMacResponse
时,您正试图将值转换为BTMacResponse
。
换句话说,您是否希望能够将FileStream
投放到MemoryStream
,因为它们都是从Stream
继承而来的?
您是否希望能够将Button
投放到String
,因为它们都是从Object
继承而来的?
答案 1 :(得分:2)
你不能这样投。以下是非法的:
class Base {
}
class A : Base {
}
class B: Base {
}
Base someBase = new A();
B someB = (B)someBase;
答案 2 :(得分:0)
您无法强制转换层次结构,因为在创建父对象时,您不会使用它创建子对象,但是当您创建子对象时,会创建父对象的实例,这就是为什么您可以向上而不是低垂。
在您的情况下,您可以将DataLayer.WebserviceMessage强制转换为其子级而不是相反的。
答案 3 :(得分:0)
没有DataLayer.BTMacResponse的承包商将DataLayer.WebserviceMessage作为您需要实现的参数:
public BTMacResponse(WebserviceMessage w)
{
// copy stuff to 'this'
}
public static implicit operator BTMacResponse(WebserviceMessage w)
{
BTMacResponse b = new BTMacResponse(w);
return b;
}