如何在C#中将NSObject转换为其他类型?

时间:2019-05-15 05:35:11

标签: c# xamarin.ios

我有一个这样返回NSObject的方法

[BindingImpl (BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)]
    public virtual NSObject AgentHandler {
        [Export ("agentHandler")]
        get {
            NSObject ret;
            if (IsDirectBinding) {
                ret = Runtime.GetNSObject (global::ApiDefinitions.Messaging.IntPtr_objc_msgSend (this.Handle, Selector.GetHandle ("agentHandler")));
            } else {
                ret = Runtime.GetNSObject (global::ApiDefinitions.Messaging.IntPtr_objc_msgSendSuper (this.SuperHandle, Selector.GetHandle ("agentHandler")));
            }
            return ret;
        }

    }

然后我有一个NSObject类型的班级

public unsafe abstract partial class LSMAHandler : NSObject

我想将NSObject投射到LSMAHandler 有可能吗?

我做了这样的事情

NSObject handler = lSUniversal.AgentHandler;
var myHandler = (LSMAHandler)handler;

但这给我一个错误

  

未处理的异常:

     

System.InvalidCastException:指定的强制转换无效。发生

更新

@property (readonly, nonatomic) NSObject<LSMAHandler,LSMAHandlerPincode,LSMAHandlerRegister> *agentHandler;

这是我的目标c属性。我想在我的ApiDefinition.cs

中定义它

更新2

 [BaseType(typeof(LSMAHandler))]
 [Protocol, Model]
 interface LSMAHandlerRegister

[Protocol, Model]
interface LSMAHandlerPincode : LSMAHandler

1 个答案:

答案 0 :(得分:0)

定义一个像这样的类:

public class AgentHandler : LSMAHandler, LSMAHandlerPincode, LSMAHandlerRegister
{
}

那么您的财产可能是这样的:

public AgentHandler agentHandler;