如何将StrongDelegate ObjC代码移植到C#MonoTouch?

如何将StrongDelegate ObjC代码移植到C#MonoTouch?,c#,objective-c,xamarin.ios,multipeer-connectivity,objective-c-2.0,C#,Objective C,Xamarin.ios,Multipeer Connectivity,Objective C 2.0,我是Xamarin和C#的代理,但是我不确定如何在TapViewController中移植此方法 它包含所有我不知道如何移植的东西。。。即 仅用代码表示的委托,在Xamarin框架中没有强委托。(这可能很简单,只是我缺少了一个概念) 这里的id到底是什么,我该如何声明/使用它 如何声明self.delegate 代码: -(iAction)关闭按钮操作:(id)发送方 { id strong代表; #pragma未使用(发送方) strong委托=自委托; if([strongDelegate

我是Xamarin和C#的代理,但是我不确定如何在TapViewController中移植此方法

它包含所有我不知道如何移植的东西。。。即

  • 仅用代码表示的委托,在Xamarin框架中没有强委托。(这可能很简单,只是我缺少了一个概念)
  • 这里的
    id
    到底是什么,我该如何声明/使用它
  • 如何声明
    self.delegate
  • 代码:

    -(iAction)关闭按钮操作:(id)发送方
    {
    id strong代表;
    #pragma未使用(发送方)
    strong委托=自委托;
    if([strongDelegate respondsToSelector:@selector(tapViewControllerDidClose:)])){
    [strongDelegate tapViewControllerDidClose:self];
    }
    }
    

    这里是一个端口,您是否试图在不知道前一个端口的情况下将Objective-C代码移植到C#

    • id
      是Obj-C的“任何对象”,而
      id
      是实现指定协议的任何对象。Obj-C“委托”只是一个实现给定协议的对象,它的使用方式使其成为委托。Objc-C协议和C#接口是相互匹配的概念。因此,
      strongDelegate
      是一个类型为C#接口的变量(您可能已经从Obj-C协议翻译过来了)
    • 声明
      self.delegate
      :它是一个Objc-C属性引用,与
      strongDelegate
      的类型相同(或兼容)。C#具有属性
    • Obj-C中的
      if
      测试用于确定被引用对象是否实现了指定的方法,如果是,则调用该方法。Obj-C协议允许可选方法,即实现协议的方法对象不需要实现。C#接口没有直接等价物。在将Obj-C协议转换为C#接口时,您要么将所有可选方法设置为非可选方法,要么执行其他操作。翻译
      (如果
      )以匹配您所做的任何事情

    HTH

    这是客观的,不是斯威夫特
    - (IBAction)closeButtonAction:(id)sender
    {
        id <TapViewControllerDelegate>  strongDelegate;
    
        #pragma unused(sender)
        strongDelegate = self.delegate;
        if ([strongDelegate respondsToSelector:@selector(tapViewControllerDidClose:)]) {
            [strongDelegate tapViewControllerDidClose:self];
        }
    }