


Zusammenstellung von C#-Grundkenntnissen Grundkenntnisse (20) Delegation (1)
Delegierte und Ereignisse werden in C# häufig verwendet, insbesondere bei der Formularprogrammierung. Viele Vorgänge müssen über Delegaten und Ereignisse verarbeitet und bereitgestellt werden. Hier finden Sie eine detaillierte Erläuterung der Verwendung und der Gründe von Delegaten und Ereignissen, damit wir sie beim Schreiben von Code besser verstehen können.
Die Verwendung von Delegation
Ereignisse sind ein Mechanismus, und Ereignisse werden durch Delegation implementiert. Wenn Sie also Delegation verstehen, werden Sie Ereignisse besser verstehen. Schauen wir uns unten ein kleines Beispiel an.
Dies ist der Code zur Beschreibung von Programmierern in verschiedenen Sprachen:
Zum Beispiel beschreiben wir einen Programmierer, der C# verwendet, wie folgt, wobei der Parameter „programerName“ den Namen des Programmierers darstellt.
public void CsharpProgramer(string programerName) { Console.WriteLine(string.Format("{0} 使用C#编程!", programerName)); }
Verwenden Sie Java,
public void JavaProgramer(string programerName) { Console.WriteLine(string.Format("{0} 使用Java语言编程!")); }
Wie können Sie bei so vielen Sprachen feststellen, um welchen Programmierer es sich handelt? Verwenden Sie eine Aufzählung zur Darstellung:
public enum ProgramLanguage { CSharp, C, Java }
Geben Sie dann eine vollständige Beschreibung ein. Der Code lautet wie folgt:
public class ProgramerDescription { //01 public void CsharpProgramer(string programerName) { Console.WriteLine(string.Format("{0} 使用C#编程!", programerName)); } public void CProgramer(string programerName) { Console.WriteLine(string.Format("{0}使用C语言编程!", programerName)); } public void JavaProgramer(string programerName) { Console.WriteLine(string.Format("{0} 使用Java语言编程!")); } //02 public void Description(string programerName, ProgramLanguage type) { switch (type) { case ProgramLanguage.CSharp: CsharpProgramer(programerName); break; case ProgramLanguage.C: CProgramer(programerName); break; case ProgramLanguage.Java: JavaProgramer(programerName); break; default: Console.WriteLine("A kind of new Language that you never heard of."); break; } } } public enum ProgramLanguage { CSharp, C, Java }
Aufruf:
ProgramerDescription pm = new ProgramerDescription(); pm.Description("杨友山", ProgramLanguage.CSharp);
Zu diesem Zeitpunkt , Ausgabe „Yang Youshan verwendet C# zum Programmieren!“;
Auf diese Weise wurde zunächst eine einfache Implementierung der Beschreibung des Programmierers abgeschlossen. Die Beschreibungsmethode verwendet hier einen Aufzählungstyp, um verschiedene Sprachen zu unterscheiden. Daher ist die Wartbarkeit relativ schlecht, da es viele Programmiersprachen (C++, PHP usw.) gibt. Wenn Sie eine Sprache hinzufügen möchten, müssen Sie eine entsprechende Methode hinzufügen und diese dann ändern ProgramLanguage-Aufzählungstyp. Das Hinzufügen von Methoden hat kaum Auswirkungen auf das ursprüngliche Programm, da es mithilfe von Teilklassen implementiert werden kann. Eine Änderung der Aufzählung ist jedoch nicht im Einklang mit dem offenen und geschlossenen Prinzip des objektorientierten Designs.
Wie geht man damit in der Beschreibungsmethode um, also ohne Aufzählung? Wie unterscheidet die Beschreibungsmethode, welche Methode (CsharpProgramer, CProgramer, JavaProgramer) aufgerufen werden soll, um den Programmierer zu beschreiben?
public void Description(string programerName, ein bestimmter Parameter eines bestimmten Typs)
{
// Rufen Sie die entsprechende Methode auf
}
Der bestimmte Typ wird hier verwendet, um den Typ davon zu unterscheiden Mit anderen Worten, es ist am besten, wenn ich die Methode, die ich aufrufen möchte, hier direkt als Parameter übergebe. Zum Beispiel möchte ich die CProgramer-Methode aufrufen, um einen C-Programmierer zu beschreiben,
ProgramerDescription pm = new ProgramerDescription(); So drücken Sie „einen bestimmten Typ und einen bestimmten Parameter“ von Description(string programerName, einen bestimmten Typ und a aus bestimmter Parameter)?
Aufruf:
public class ProgramDescriptionDelegate { //委托,表示方法 public delegate void DescriptionDelegate(string programerName); //01 public void CsharpProgramer(string programerName) { Console.WriteLine(string.Format("{0} 使用C#编程!", programerName)); } public void CProgramer(string programerName) { Console.WriteLine(string.Format("{0}使用C语言编程!", programerName)); } public void JavaProgramer(string programerName) { Console.WriteLine(string.Format("{0} 使用Java语言编程!")); } //02 public void Description(string programerName, DescriptionDelegate description) { description(programerName); } }
Das Ergebnis ist das gleiche wie der ursprüngliche Code.
Was ist Delegation? MSDN erklärt es so: Ein Delegat ist ein Typ, der eine Methodensignatur definiert, mit jeder Methode mit einer kompatiblen Signatur verknüpft werden kann und über den Delegaten aufgerufen werden kann. Delegaten werden verwendet, um Methoden als Parameter an andere Methoden zu übergeben. Zeithandler sind Methoden, die über Delegaten aufgerufen werden.ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); pm.Description("杨友山", pm.CsharpProgramer);
Sehen Sie sich den Code mit dem Delegaten genau an,
public void Description(string programerName, DescriptionDelegate description). Beim Aufruf wird die
Ergebnis:
//方法和委托绑定 ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); YYS.CSharpStudy.Window.SDelegate.ProgramDescriptionDelegate.DescriptionDelegate csharpDelegate = pm.CsharpProgramer; YYS.CSharpStudy.Window.SDelegate.ProgramDescriptionDelegate.DescriptionDelegate cdelegate = pm.CProgramer; pm.Description("杨友山", csharpDelegate); pm.Description("D.M.Ritchie", cdelegate);
Erneut ändern:
Ergebnis :
ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); YYS.CSharpStudy.Window.SDelegate.ProgramDescriptionDelegate.DescriptionDelegate pdelegate = null; pdelegate += pm.CsharpProgramer; pdelegate += pm.CProgramer; pm.Description("杨友山", pdelegate);
Hier wird zuerst pm.CsharpProgramer und dann die Methode pm.CProgramer ausgeführt. Es ist ersichtlich, dass der Delegat nicht nur Methoden als Parameter verwenden, sondern auch Methoden binden und mehrere Methoden binden kann.
Auf diese Weise wird nur eine Methode pm.CsharpProgramer aufgerufen.
ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); YYS.CSharpStudy.Window.SDelegate.ProgramDescriptionDelegate.DescriptionDelegate pdelegate = null; pdelegate += pm.CsharpProgramer; pdelegate += pm.CProgramer; pdelegate -= pm.CProgramer; pm.Description("杨友山", pdelegate);

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





Leitfaden zu Active Directory mit C#. Hier besprechen wir die Einführung und die Funktionsweise von Active Directory in C# sowie die Syntax und das Beispiel.

Leitfaden zur C#-Serialisierung. Hier besprechen wir die Einführung, die Schritte des C#-Serialisierungsobjekts, die Funktionsweise bzw. das Beispiel.

Leitfaden zum Zufallszahlengenerator in C#. Hier besprechen wir die Funktionsweise des Zufallszahlengenerators, das Konzept von Pseudozufallszahlen und sicheren Zahlen.

Leitfaden zur C#-Datenrasteransicht. Hier diskutieren wir die Beispiele, wie eine Datenrasteransicht aus der SQL-Datenbank oder einer Excel-Datei geladen und exportiert werden kann.

Leitfaden zu Mustern in C#. Hier besprechen wir die Einführung und die drei wichtigsten Arten von Mustern in C# zusammen mit ihren Beispielen und der Code-Implementierung.

Leitfaden zur Fakultät in C#. Hier diskutieren wir die Einführung in die Fakultät in C# zusammen mit verschiedenen Beispielen und Code-Implementierungen.

Leitfaden zu Primzahlen in C#. Hier besprechen wir die Einführung und Beispiele von Primzahlen in C# sowie die Codeimplementierung.

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.
