2016-08-03 10 views
0

私はこれらのタイプについて少し混乱しています。(Xamarin IOS)XXXDelegateクラス、IXXXDelegateインターフェイス、およびXXXDelegate_Extention staicクラスの関係は何ですか?どちらを使うの?

特にXXXDelegate_Extentionクラス。オプションのプロトコルメソッドを実装したい場合、このXXXDelegate_Extentionは有用でしょうか?あるいは、私は常にXXXDelegateクラスをサブクラス化する必要がありますか?

ありがとうございます!

+0

WICH例えば1? –

+0

WebKit.WKNavigationDelegate_Extensionsのような? – Student222

答えて

1

iOSのデリゲートにはオプションの方法があります。 IXXDelegateは、非オプションの関数を宣言しているため、XXXDelegateのみは、オプションの関数を実装しています。 XXXDelegate_Extentionは、オプションの機能をデリゲート(インターフェイス)に追加します。したがって、XXXDelegateから継承するか、IXXXDelegateを完全に実装してください。あなたが本当に完全にカスタム化された実装を必要としない限り、継承したいと思います。

C#の拡張メソッドは、インスタンスメソッドと同様に呼び出すことができますが、このインスタンスの型内で宣言されていないメソッドです。拡張メソッドの

public class MyClass 
{ 
    public int Foo(int a) 
    { 
     return a + 1; 
    } 
} 

public static class MyClassExtension 
{ 
    public static int Bar(this MyClass my, int a) 
    { 
     return my.Foo(a+1); 
    } 
} 

var x = new MyClass(); 
x.Foo(2); // returns 3 
x.Bar(2); // returns 4 

さらに詳しい情報:https://msdn.microsoft.com/en-us//library/bb383977.aspx

+1

あなたの最初の行で - 「iOS上のプロトコル」と言うのが正確ですか?デリゲートはプロトコルの実現です。また、インタフェースを使用する際には、メソッドがObjective-Cランタイムに公開されるように、実装が明示的に 'ExportAttribute'(IDEは通常これを自動的に行います)をメソッドに追加する必要があります。クラスは1つの親からしか継承できないが、多くのインターフェイスを実装できるので、インターフェイスはC#では貴重であることにも気付くだろう。 1つのクラスが多くのプロトコルを実装できるようにする...そのコードの品質は議論のトピックです:) – dylansturg

関連する問題