向下转换接口参考
当我尝试将一个对象转换为一个我很确定它实现的接口时,我得到了一个运行时异常。
我有以下接口:
public interface class ISMILTimeContainer;
public interface class ISMILSequence : ISMILTimeContainer;
public interface class ISMILParallel : ISMILTimeContainer;
我有以下类:
ref class TimeContainer : public ISMILTimeContainer;
ref class Sequence : public TimeContainer, ISMILSequence;
ref class Parallel : public TimeContainer, ISMILParallel;
然后,我尝试以下方法:
ISMILTimeContainer^ container = getSequence(); // returns a Sequence^
ISMILSequence^ sequence = static_cast<ISMILSequence^>(container);
这会在运行时引发异常:
Platform :: InvalidCastException ^在内存位置0x04AFD83C。 HRESULT:0x80004002不支持此类接口
据我所知,这应该是工作。 我正在尝试做什么,或者症状表明是否存在执行问题(与上述要求不同)?
您的container
是由隐式ISMILTimeContainer
创建的ISMILTimeContainer
。 这是向上转换,将派生类对象( getSequence()
, Sequence
的返回值)转换为父类或基类对象( ISMILTimeContainer
)。
当你在下一个语句中尝试向下转换为ISMILSequence
时,因为你有一个继承链,所以你使用static_cast<ISMILSequence^>
传递编译器检查。
但是,C ++ / CX也运行运行时检查[1],在这种情况下, ISMILTimeContainer
类型的container
变量似乎没有在第二条语句中形成ISMILSequence
所需的全部信息。 虽然ISMILSequence
IS-A ISMILTimeContainer
,但事实恰恰相反。
有关上传和下传的信息,请参阅[2]或其他谷歌搜索结果。 本博客文章后面的部分可能会有所帮助。
链接地址: http://www.djcxy.com/p/23287.html