向下转换接口参考

当我尝试将一个对象转换为一个我很确定它实现的接口时,我得到了一个运行时异常。

我有以下接口:

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

上一篇: Downcasting interface references

下一篇: Vim: Restart Syntax Highlighting from Arbitrary Line