2016-08-03 8 views
0

Ich bin ein wenig verwirrt über diese Typen.(Xamarin IOS) Was sind die Beziehungen zwischen XXXDelegate-Klasse, IXXXDelegate-Schnittstelle und XXXDelegate_Extention Staic-Klasse? Wann welche verwenden?

Speziell XXXDelegate_Extention-Klassen. Wenn ich eine optionale Protokollmethode implementieren möchte, wird diese XXXDelegate_Extention nützlich sein? Oder muss ich immer die Klasse XXXDelegate ableiten?

Danke!

+0

Weicht man zum Beispiel? –

+0

Wie WebKit.WKNavigationDelegate_Extensions? – Student222

Antwort

1

Delegierte auf iOS können optionale Methoden haben. Da die Schnittstelle IXXDelegate nur die nicht-optionalen Funktionen deklariert, implementiert XXXDelegate nur die nicht-optionalen Funktionen. Das XXXDelegate_Extentionfügt die optionalen-Funktionen zu dem Delegaten (Schnittstelle) hinzu. Sie können also entweder von XXXDelegate erben oder IXXXDelegate komplett auf eigene Faust implementieren. Ich würde es vorziehen, zu erben, es sei denn, Sie benötigen wirklich eine vollständig benutzerdefinierte Implementierung.

Erweiterungsmethoden in C# sind Methoden, die wie Instanzmethoden aufgerufen werden können, aber nicht innerhalb des Typs dieser Instanz deklariert sind.

Beispiel auf Erweiterungsmethoden

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 

Weitere Informationen: https://msdn.microsoft.com/en-us//library/bb383977.aspx

+1

In Ihrer ersten Zeile - ist es genauer zu sagen "Protokolle auf iOS"? Da ein Delegierter eine Umsetzung eines Protokolls ist. Sie können auch beachten, dass die Implementierung bei der Verwendung der Schnittstelle explizit das 'ExportAttribute' (die IDE tut dies normalerweise automatisch) zu den Methoden hinzufügen muss, damit sie der Objective-C-Laufzeit ausgesetzt sind. Ich würde auch bemerken, dass die Schnittstellen in C# wertvoll sind, da eine Klasse nur von einem Elternteil erben kann, aber viele Schnittstellen implementieren kann. 1 Klasse erlauben, viele Protokolle zu implementieren ... Die Qualität dieses Codes ist natürlich ein Diskussionsthema :) – dylansturg