继承类之间的强制转换

本文关键字:转换 之间 继承 | 更新日期: 2023-09-27 18:02:04

下面的强制转换不起作用。我认为应该,你能给我解释一下为什么吗?WebserviceErrorMessageBTMacResponse都继承自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;
        }