继承类之间的强制转换
本文关键字:转换 之间 继承 | 更新日期: 2023-09-27 18:02:04
下面的强制转换不起作用。我认为应该,你能给我解释一下为什么吗?WebserviceErrorMessage
和BTMacResponse
都继承自WebserviceMessage
类
DataLayer.WebserviceMessage msg = new Service.WebserviceErrorMessage(ex) ;
DataLayer.BTMacResponse macrsp = (DataLayer.BTMacResponse)msg;
除非WebserviceErrorMessage
继承自BTMacResponse
,我不明白为什么这应该工作。当对象不是 BTMacResponse
时,您试图将值强制转换为BTMacResponse
。
换句话说,您是否期望能够将FileStream
转换为MemoryStream
,仅仅因为它们都继承自Stream
?
您是否期望能够将Button
转换为String
,仅仅因为它们都继承自Object
?
你不能那样强制转换。以下是非法的:
class Base {
}
class A : Base {
}
class B: Base {
}
Base someBase = new A();
B someB = (B)someBase;
你不能向下转换层次结构,因为当你创建父对象的对象时,你不会用它来创建子对象,但是当你创建子对象的一个父对象的实例时,这就是为什么你可以向上转换而不能向下转换。
可以强制转换DataLayer。
没有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;
}