gpt4 book ai didi

c# - 为什么我需要覆盖托管包装委托(delegate)对象中的可选 ObjC 方法?

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:06 24 4
gpt4 key购买 nike

场景如下:

我已经使用 btouch 工具成功绑定(bind)了来自 native ObjC 库的两个对象。绑定(bind)对象是一个类和一个充当其委托(delegate)对象的协议(protocol)。 Delegate 对象包含必需的和可选的方法。我已经包括了它需要工作的额外枚举。一切都可以完美地编译和工作,除了如果我不重写托管委托(delegate)类中的一些可选方法,我会得到一个 You_Should_Not_Call_base_In_This_Method 异常。

这就是我为协议(protocol)创建 API 定义的方式(虚拟方法名称):

[BaseType(typeof(NSObject))]
[Model]
interface TheDelegate
{
#region Required
[Abstract]
[Export("requiredMethod:")]
void RequiredMethod(string par);
#endregion Required

#region Optional
[Export("optMethod:")]
void OptMethod(string par);
#endregion Optional
}

如果我将 OptMethod 排除在定义之外,应用程序将完美执行。但在那种情况下,该方法将无法在我需要时覆盖,我将不得不使用 btouch 创建一个新程序集以包含它。

所以当我像这样继承 Delegate 对象时:

private class MyDelegate : TheDelegate
{
public override void RequiredMethod(string par)
{
//inside RequiredMethod override
}
}

我明白了

...base_In_This_Method

OptMethod 方法中的异常。但是,如果我以完全相同的方式继承它,但 API 定义不包含 OptMethod,则一切正常。

有什么想法吗?

最佳答案

这是我们本周解决的 MonoTouch 运行时中的错误。它将在 MonoTouch 的下一个 alpha 版本中修复。

关于c# - 为什么我需要覆盖托管包装委托(delegate)对象中的可选 ObjC 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258199/

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