gpt4 book ai didi

casting - 向下转换接口(interface)引用

转载 作者:行者123 更新时间:2023-12-04 12:40:51 25 4
gpt4 key购买 nike

当我尝试将对象强制转换为我很确定它实现的接口(interface)时,我遇到了运行时异常。

我有以下接口(interface):

public interface class ISMILTimeContainer;
public interface class ISMILSequence : ISMILTimeContainer;
public interface class ISMILParallel : ISMILTimeContainer;

我有以下类(class):
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 ^ at memory location 0x04AFD83C. HRESULT:0x80004002 No such interface supported



据我所知,这应该有效。我正在尝试做的事情是否有问题,或者症状是否表明实现问题(与上面声称的不同)?

最佳答案

您的 containerISMILTimeContainer由隐式强制转换创建。这是向上转换,将派生类对象( getSequence() 的返回值,Sequence )转换为父类或基类对象( ISMILTimeContainer )。

然后,当您尝试向下转换为 ISMILSequence在你的下一个语句中,因为你有一个继承链,你使用 static_cast<ISMILSequence^> 通过编译器检查.

但是,C++/CX 也运行运行时检查 [1] ,在这种情况下,您的 container ISMILTimeContainer 类型的变量, 没有形成 ISMILSequence 所需的所有信息在你的第二个声明中。虽然 ISMILSequence IS-A ISMILTimeContainer , 反之则不成立。

有关向上转换和向下转换的信息,请参阅 [2]或其他谷歌搜索结果。本博文的后面部分可能会有所帮助。

关于casting - 向下转换接口(interface)引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26742306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com