C # Verlängerungsverfahren und die Verwendung von

GPS - Plattform, Baustelle, Softwareentwicklung, Systembetrieb und Wartung, eine große Wald - Netzwerk - Technologie zu finden!
http://cnsendnet.taobao.com
von Sen Wissenschaft und Technologie offiziellen Blog
http://www.cnsendblog.com/index.php/?p=476

Extension-Methode ermöglicht es Ihnen, Methoden zu bestehenden Typen „add“, ohne einen neuen abgeleiteten Typen zu schaffen, neu zu kompilieren oder auf andere Weise die ursprüngliche Art zu modifizieren. Extension-Methode ist eine besondere Art von statischen Methode, kann aber als eine Instanz-Verfahren auf die gleiche Art von Expansion bezeichnet werden. Dies sind die Msdn offiziellen Webseite Beschreibung der Erweiterung Methode, und jetzt muss ich das Beispiel einer Szene dieses Verhalten erklären. Angenommen, ein Konsolenprogramm class Program {}, die Hauptfunktion ist wie folgt:

static void Main (string [] args)
{
Datetime now = DateTime.Now;
String time = now.ToString ( "yyyy-MM-DD HH: mm: ss");
Console.WriteLine (Zeit);
Console.ReadKey ();
}

: Angenommen , die Nachfrage kann natürlich nur Zeit initialisiert durch folgende Wortlaut neu geschrieben werden, das Anzeigeformat des Datums zu werden „yyyy-MM-dd“ Format geändert
String = now.ToString Time ( „yyyy-MM-dd“ ),
aber wenn Sie das Datumsformat gibt es viele , wie es ändern? Jeder muss wieder geändert werden? Sobald eine solche Nachfrage ändern sie die Meinungen der Menschen zu beschäftigt. Die traditionelle Lösung ist eine Hilfsklasse zu verpacken, in dem Schreibverfahren und für andere Arten von Anrufen.
Hinzufügen eines Mimetikum der vorliegenden Ausführungsform , in das aktuelle Projekt DateHelper Klasse: public class DateHelper {}, die in den Klassenmethoden definiert ist:
public static String dateToString (DATETIME dt)
{
zurück dt.ToString ( "der MM-DD-YYYY HH: mm: ss") ;
}
so wie folgt die Hauptfunktion des Originals neu geschrieben:

static void Main (string [] args)
{
Datetime now = DateTime.Now;
String Zeit = DateHelper.DateToString (jetzt);
Console.WriteLine (Zeit);
Console.ReadKey ();
}

An diesem Punkt , wenn Anforderungen ändern, müssen Sie nur DateHelp Klasse von DateToString () -Methode auf der Linie, egal wie viele Klassen nennen diese Methode neu zu schreiben, werden betroffen sein. Lösen Sie das Problem, aber diese Klasse eine andere Methode zu nennen, oder ein wenig Mühe, gibt es keine Möglichkeit , uns wie now.DateToString zu machen () als direkter Anruf oder ? Natürlich ist Microsoft Datetime geschrieben, können wir nicht ändern, können keine Instanz Methode , die Sie erstellen möchten, so dass es zu Erweiterungsmethoden führt.
Das Folgende ist ein Element Erweiterungsmethode:
1. das Verfahren eine statische Methode sein muss
2. Diese Methode muss in einer statischen Klasse platziert werden
3. Der erste Parameter dieser Methode müssen mit diesem starten, und dieses Verfahren erweitert wird , die Art von spezifizieren
die mehr Elemente, änderten wir DateHelper Klasse statische Klasse: public static Klasse DateHelper {}, während dateToString Neuschreiben () Methode:
public static String dateToString (die dies die Datumzeit dt)
{
zurück dt.ToString ( „mm-dd-YYYY HH: mm: SS „);
}
. In diesem Fall kehrt das Verfahren zu der Hauptfunktion davon Eingang“ jetzt „eine dateToString automatisch prompt () Methode, und den Code haben , gesehen werden kann wie folgt geschrieben werden:

static void Main (string [] args)
{
Datetime now = DateTime.Now;
String time = now.DateToString ();
Console.WriteLine (Zeit);
Console.ReadKey ();
}

Offensichtlich wird dies bequemer sein , sie zu benutzen, und so lassen Sie uns sehen genauso aus wie sein eine Instanz Methode selbst die gleiche Art von Expansion hat, sehr gut lesbar. Im Folgenden werden die Eigenschaften eines Erweiterungsmethode zusammenzufassen:
1. Erweiterungsmethode , die sich von der Art erstreckt, muss es diese Art von Variable sein , andere Typen verwenden , können nicht verwendet werden, in diesem Fall von Typ Datumzeit erstreckt, kann es nur eine Variable vom Typ Datetime geführt werden. (now.DateToString ())
Parameter hinter dieser Erweiterungsmethode 2. die Parameter des Verfahrens sind es nicht, die vorliegende Ausführungsform ist kein Parameter, wird die letztere in diesem Datumzeit spezifiziert dt erstreckt Methode aus , welche Art
3. Wenn Erweiterungsmethoden und Beispiele Verfahren , die die gleiche Signatur aufweisen, die Prioritätsruf Instanzmethode
werden das Objekt 4. die Erweiterungsmethode von der Elternklasse, verwendet , um direkt die Unterklassen
5 von der Schnittstelle erstreckt, kann das Objekt direkt implementiert werden Klasse
6. Verfahren Endausbau oder der Compiler in: statische Klasse statische Methode (), in diesem Fall now.DateToString () wird schließlich in DateHelper.DateToString (jetzt) zusammengestellt werden, was sein Wesen ist
in der Tat können wir begegnen alle die schon Klasse Szenarien, wie ein Verfahren , in einer Schnittstellenerweiterung der Zeit, dass die Interface - Methoden implementiert müssen die neue Erweiterung erreichen, ist diese Änderung eine sehr Müde von der Arbeit, können Sie Erweiterungsmethoden „Quxianjiuguo“ verwenden, und manchmal wollen wir neue Methoden zu einer Klasse dieser Klasse will nicht zu ändern hinzuzufügen, dann ist diese Art von Erweiterungsmethoden „pseudo-added“ Ansatz würde spiegelt den Wert seines . Die gängigste Methode ist LINQ Standardabfrageoperatoren, die umfangreiche Nutzung dieser bequemen und effizienten Weg , um Code Landwirte zu erweitern , die 1024 Punkte Lob gewinnen sollte.

Was ist eine Erweiterung Methode?
  Extension - Methode bezieht sich buchstäblich auf ein Verfahren zur Expansion, und dies entspricht das objektorientierte Programmiermuster bezieht sich auf ein Verfahren der Klasse verbreitet. Nach unserem üblichen Verständnis, mussten wir zunächst den Quellcode für eine Klasse erhalten, und dann die Mitglieder dieser Klasse Methode im Code hinzufügen, so dass Sie den Zweck der Bereitstellung eine Erweiterungsmethode für eine Klasse erreichen können. Aber leider ist diese Methode im Quellcode ist nicht der Fall , dass Sie nicht arbeiten können, und wir gingen künstlich den Quellcode zu ändern , ist wahrscheinlich die Stabilität des gesamten Code zu untergraben. Gibt es eine Möglichkeit , einen Weg , um eine Klasse ohne Änderung des Quellcodes der Prämisse , sie zu verlängern? Dies ist eine Erweiterung Methode , die wir heute sagen wollen, so können wir die Methode erweitern zu verstehen Methode bietet eine Möglichkeit, ohne Änderung des Quellcodes der Prämisse nach außen zu erweitern. Erweiterungsmethoden in C # zu implementieren sind relativ einfach, wie wir in Unity3D Spiele - Entwicklung zu tun, kann es DOTween dieses Plugin verwendet werden. Dieses Plugin ist der Autor ITween eine Animation Plugin neu zu schreiben, ITween dort als auf Effizienz stark verbessert. Wichtiger Punkt ist , dass es Erweiterungsmethoden verwendet eine solche Art und Weise zu erreichen , dass , wenn wir diese API - Schnittstelle ist schwer zu fühlen rufen , dass wir mehr ein Plug-in, wie mit Unity3D native Funktion, so dass , wenn wir verwenden DOTween verwenden + uGUI diese Kombination , wenn das Herz sehr wohl fühlen, alles fällt in Stelle wie ein General.
Erweiterungsmethoden Was sind die Merkmale?
  Erweiterungsmethode in der objektorientierten Programmierung implementiert und normal ist das gleiche, mit anderen Worten, wir brauchen nur eine Klasse zu definieren, und fügen Sie dann die entsprechende Methode darin implementiert werden kann. Aber wo gibt es drei Punkte hier beachten Zunächst müssen die Implementierungsklasse Erweiterungsmethoden unabhängig von den Namen der Klasse und statische Klasse und Erweiterungsmethoden Klasse zu erreichen;. Zweite, eine Klassenmethode Erweiterungsmethoden implementieren müssen statische Methode sein, drittens, der erste Parameter Klassenmethode Erweiterungsmethoden implementieren müssen mit diesem Schlüsselwort - Methode angegeben werden , um die Expansion der Klasse zu erreichen. Zum Beispiel wissen wir , dass eine legitime String in einen Integer - Typ konvertiert, können Sie int.Parse () -Methode verwenden, wenn wir sollten eine ToInt Methode für den String - Typ erweitern möchten sein , wie es zu tun? Gemeinsam schauen wir auf den folgenden Code:

  1. /// <summary>
  2. /// 1, die Definition einer statischen Klasse
  3. /// 2, statischer Klassenname und die spezifische Klasse des Erweiterungsmethode zu erreichen, ist unabhängig
  4. /// </ summary>
  5. public static Klasse Someclass
  6. {
  7. /// <summary>
  8. /// 3, eine bestimmte statische Methode zu erreichen,
  9. /// </ summary>
  10. /// <param name = „str“> 4, den ersten Parameter verwenden, müssen Sie den Typ dieses Schlüsselwort-Erweiterungsmethode </ param> angegeben werden,
  11. /// <returns> </ returns>
  12. public static int ToInt (diese Zeichenfolge str)
  13. {
  14. return int.Parse (str);
  15. }
  16. }
    Beachten Sie, dass die Methode C # unterstützt Erweiterung ist mit NET3.5 Version zu starten, so dass , wenn eine Erweiterungsmethode zu schreiben, stellen Sie sicher , dass Ihre .NET - Version diese Anforderung erfüllt. Erwähnt Version gibt es eine Menge Freunde, vor allem nach Unity5.0 starten von Unity3D Freunden lernen, erwähnt die Nachricht oft meinen Code nicht in einer neuen Umgebung nicht ausgeführt, usw. Auf ähnliche Frage in meinem Blog, ich glaube , diese Welt das Update war zweifellos die schnellste IT - Technologie nutzen wir die neue Version kein Problem, aber manchmal wegen der historischen Themen wie Technologieentwicklung und python2.7 Python3, Unity4.X und Unity5.X kann dies auftreten , wenn Version Kompatibilitätsprobleme, diesmal , wenn die Ressourcen im Netzwerk nicht aktuell sind, wird empfohlen, die offizielle aktuelle Dokumentation in einer angemessenen Weise zu überprüfen, weil es Blogger in Verbindung stehende Artikel oder Bücher über das Netzwerk an den alten Spruch zu beziehen , werden verwendet , scheint: do Schreiben Buch wie kein Buch, nur objektiv bestimmt leidenschaftslos das richtige Wissen oder nicht, können wir nur wirklich nützliches Wissen lernen.
      Nun, jetzt , nachdem wir diese Erweiterung Methode fertig schreiben, können Sie Erweiterungsmethoden wie die folgenden verwenden:
  17. String str = "1234";
  18. int val = str.ToInt ();
    dieses Beispiel zeigen , wie eine Erweiterung Methode ohne Argumente zu schreiben, so dass , wenn wir Parameter in der Verlängerung Methode übergeben müssen, wie es zu tun? Wir müssen nur weiterhin in einer Erklärung hinzufügen Parameter nach dem ersten Argument genug. Zum Beispiel mussten wir oft ein 3D - Objekt in Unity3D angeordnet koordinieren wir in der Regel durch den folgenden Code implementiert werden können:
    transform.position Vector3 new new = (1,1,1);
    Dieser Code ist relativ einfach so weit, aber wir Unity3D weiß , dass es zusätzlich zu der Position Eigenschaft local Eigenschaft, wenn unser Code wieder in der Koordinatenberechnung beteiligt, glaube ich , dass der Code sehr lang sein wird. Was mehr ist, manchmal wollen wir nur eine Dimension der dreidimensionalen Koordinaten ändern, aber wir haben einen dreidimensionalen Koordinaten transform.position geben, nicht überraschend, zu diesem Zeitpunkt wird der Code länger sein. Um dieses Problem zu lösen, können wir die drei Methoden SetPositionX, SetPositionY, SetPositionZ jeweils als x, y, z - Koordinaten der drei Komponenten Zuordnung erstrecken, fahren wir fort , Methoden Someclass diese Klasse hinzufügen:
  19. /// <summary>
  20. /// setzen die X-Koordinate von TRANFORM
  21. /// </ summary>
  22. /// <param name = "tran"> 当前 Trans </ param>
  23. /// <param name = "x"> X 坐标 </ param>
  24. public static void SetPositionX (diese Transformation tran, float x)
  25. {
  26. tran.position = new Vector3 (x, tran.position.y, tran.position.z);
  27. }
  28. /// <summary>
  29. /// set die Y-Koordinate TRANFORM
  30. /// </ summary>
  31. /// <param name = "tran"> 当前 Trans </ param>
  32. /// <param name = "x"> Y 坐标 </ param>
  33. public static void SetPositionY (Diese Trans tran, float y)
  34. {
  35. tran.position = new Vector3 (tran.position.x, y, tran.position.z);
  36. }
  37. /// <summary>
  38. /// setzen die Z-Koordinate TRANFORM
  39. /// </ summary>
  40. /// <param name = "tran"> 当前 Trans </ param>
  41. /// <param name = "x"> Z 坐标 </ param>
  42. public static void SetPositionZ (Diese Trans tran, float z)
  43. {
  44. tran.position = new Vector3 (tran.position.x, tran.position.y, z);
  45. }
    Mit Hilfe der erweiterten Methode Vor - und Nachteilen von
      Erweiterungsmethoden praktisch zu bedienen, so dass wir hier sind die Vor- und Nachteile der Verwendung einer niedrigere Erweiterungsmethode zu diskutieren. Natürlich werden die Vorteile einer freien und mutwilliger Verwendung Erweiterungsmethoden , die Klasse und Erweiterungsmethoden in Visual Studio Tipps und Tricks zu erweitern durch einen blauen Pfeil nach unten identifiziert werden. Kehrseite Erweiterungsmethode ist bei der Gestaltung der Erweiterungsmethoden Menschen besser diese Funktion verwalten können suchen, können Sie in der Tat, alle Techniken sind die gleichen, wie ich höre oft Leute verschmähen Unity3D Game - Engine in der Gruppe zu UnReal Motor4 Spiel Mount Rushmore Motor Welt, das gebe ich UE4 gutes Bild - Effekt, kann aber wirklich gut gebrauchen dieses Motors machen, wie viele Menschen tun? Wenn Erweiterungsmethoden verwenden , sollte das Prinzip der Nähe folgen, dass die Verwendung von Erweiterungsmethoden im kleinsten Bereich ist, Erweiterungsmethoden bestimmte Klasse zu erreichen , anstatt eine abstrakte Klasse. Wir verwenden die Extension - Methode einfach , weil es eine solche Funktion auf der logischen Ebene erfordert, so dass wir die logische Abstraktionsschicht nicht ändern müssen, da dieser gesamte Code „Verschmutzung“ . Um ein einfaches Beispiel zu nehmen, wissen wir , dass .NET Basisklassenobjekt ist, wenn wir die Klasse erweitern, gibt es keinen Zweifel , es wird alles von der Objektklasse geerbt beeinflussen, was dazu führen würde , „Verschmutzung“ ist offensichtlich nicht erwünscht a.
    Zusammenfassung
    • Implementierungsklassen Erweiterungsmethoden in C # muss eine statische Klasse und der Klassennamen und die Realisierung von Erweiterungsmethoden Klasse hat nichts zu tun
    • Klasse Art und Weise zu erweitern Durchführung des Verfahrens eine statische Methode sein muss ,
    die ersten Parameter • Implementierung Klassenmethode Erweiterungsmethoden sein muss verwenden Sie dieses Schlüsselwort die Klasse implementieren Erweiterungsmethoden festlegen
    • Erweiterungsmethoden implementieren sollte mit dem Prinzip der Nähe entsprechen, verwenden Sie eine Mindestreichweite Erweiterungsmethoden , um „Kontamination“ zu vermeiden

GPS - Plattform, Baustelle, Softwareentwicklung, Systembetrieb und Wartung, eine große Wald - Netzwerk - Technologie zu finden!
http://cnsendnet.taobao.com
von Sen Wissenschaft und Technologie offiziellen Blog
http://www.cnsendblog.com/index.php/?p=476

Ich denke du magst

Origin blog.51cto.com/14036626/2482943
Empfohlen
Rangfolge