


Compilation des connaissances de base C# Connaissances de base (20) Délégation (1)
Les délégués et les événements sont beaucoup utilisés en C#, en particulier lors de la programmation de formulaires. De nombreuses opérations doivent être traitées et livrées via des délégués et des événements. Voici une explication détaillée de l'utilisation et des raisons des délégués et des événements, afin que nous puissions les comprendre plus clairement lors de l'écriture du code.
L'utilisation de la délégation
Les événements sont un mécanisme et les événements sont mis en œuvre par délégation. Par conséquent, si vous comprenez la délégation, vous aurez une meilleure compréhension des événements. Regardons un petit exemple ci-dessous.
Voici le code pour décrire les programmeurs dans différents langages :
Par exemple, nous décrivons un programmeur utilisant C# comme ceci, où le paramètre programerName représente le nom du programmeur.
public void CsharpProgramer(string programerName) { Console.WriteLine(string.Format("{0} 使用C#编程!", programerName)); }
Utilisez Java,
public void JavaProgramer(string programerName) { Console.WriteLine(string.Format("{0} 使用Java语言编程!")); }
Avec autant de langages, comment savoir de quel programmeur il s'agit ? Utilisez une énumération pour représenter,
public enum ProgramLanguage { CSharp, C, Java }
Puis donnez une description complète, le code est le suivant :
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 }
Appelez :
ProgramerDescription pm = new ProgramerDescription(); pm.Description("杨友山", ProgramLanguage.CSharp);
À ce moment , sortie "Yang Youshan utilise la programmation C#!";
De cette manière, une implémentation simple de la description du programmeur a été initialement réalisée. La méthode Description utilise ici un type d’énumération pour distinguer différentes langues. De cette façon, sa maintenabilité est relativement mauvaise, car il existe de nombreux langages de programmation(C, PHP, etc.). Si vous souhaitez ajouter un langage, vous devez ajouter une méthode correspondante, puis vous devez modifier le. Type d’énumération ProgramLanguage. L'ajout de méthodes aura peu d'impact sur le programme d'origine, car il peut être implémenté à l'aide de classes partielles, mais modifier l'énumération n'est pas approprié. Cela n'est pas conforme au principe ouvert et fermé de la conception orientée objet.
Alors, comment le gérer dans la méthode Description, c'est-à-dire, sans énumération, comment la méthode Description distingue-t-elle quelle méthode (CsharpProgramer, CProgramer, JavaProgramer) appeler pour décrire le programmeur.
public void Description(string programerName, un certain paramètre d'un certain type)
{
//Appelle la méthode correspondante
>
Le certain type ici est utilisé pour distinguer le type dont En d’autres termes, il est préférable de passer directement ici la méthode que je souhaite appeler en tant que paramètre. Par exemple, je souhaite appeler la méthode CProgramer pour décrire un programmeur C,
ProgramerDescription pm = new ProgramerDescription(); Comment exprimer "un certain type et un certain paramètre" de Description(string programerName, un certain type et un certain paramètre) ?
Appel :
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); } }
Le résultat est le même que le code d'origine.
Qu'est-ce que la délégation ? MSDN l'explique ainsi : un délégué est un type qui définit une signature de méthode, peut être associé à n'importe quelle méthode avec une signature compatible et peut être appelé via le délégué. Les délégués sont utilisés pour transmettre des méthodes en tant que paramètres à d’autres méthodes. Les gestionnaires de temps sont des méthodes appelées via des délégués.ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); pm.Description("杨友山", pm.CsharpProgramer);
Examinez attentivement le code en utilisant le délégué,
public void Description(string programerName, DescriptionDelegate description). Lors de l'appel, la description
Résultat :
//方法和委托绑定 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);
Modifier à nouveau :
Résultat :
ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); YYS.CSharpStudy.Window.SDelegate.ProgramDescriptionDelegate.DescriptionDelegate pdelegate = null; pdelegate += pm.CsharpProgramer; pdelegate += pm.CProgramer; pm.Description("杨友山", pdelegate);
Ici, pm.CsharpProgramer est exécuté en premier, puis la méthode pm.CProgramer est exécutée. On peut voir que le délégué peut non seulement utiliser des méthodes comme paramètres, mais également lier des méthodes, et il peut lier plusieurs méthodes.
De cette façon, seul pm.CsharpProgramer;
ProgramDescriptionDelegate pm = new ProgramDescriptionDelegate(); YYS.CSharpStudy.Window.SDelegate.ProgramDescriptionDelegate.DescriptionDelegate pdelegate = null; pdelegate += pm.CsharpProgramer; pdelegate += pm.CProgramer; pdelegate -= pm.CProgramer; pm.Description("杨友山", pdelegate);

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Guide d'Active Directory avec C#. Nous discutons ici de l'introduction et du fonctionnement d'Active Directory en C# ainsi que de la syntaxe et de l'exemple.

Guide de sérialisation C#. Nous discutons ici de l'introduction, des étapes de l'objet de sérialisation C#, du fonctionnement et de l'exemple respectivement.

Guide du générateur de nombres aléatoires en C#. Nous discutons ici du fonctionnement du générateur de nombres aléatoires, du concept de nombres pseudo-aléatoires et sécurisés.

Guide de la vue Grille de données C#. Nous discutons ici des exemples de la façon dont une vue de grille de données peut être chargée et exportée à partir de la base de données SQL ou d'un fichier Excel.

Guide des modèles en C#. Nous discutons ici de l'introduction et des 3 principaux types de modèles en C# ainsi que de ses exemples et de l'implémentation du code.

Guide de Factorial en C#. Nous discutons ici de l'introduction de factorial en c# ainsi que de différents exemples et de l'implémentation du code.

Guide des nombres premiers en C#. Nous discutons ici de l'introduction et des exemples de nombres premiers en c# ainsi que de l'implémentation du code.

La différence entre le multithreading et l'asynchrone est que le multithreading exécute plusieurs threads en même temps, tandis que les opérations effectuent de manière asynchrone sans bloquer le thread actuel. Le multithreading est utilisé pour les tâches à forte intensité de calcul, tandis que de manière asynchrone est utilisée pour l'interaction utilisateur. L'avantage du multi-threading est d'améliorer les performances informatiques, tandis que l'avantage des asynchrones est de ne pas bloquer les threads d'interface utilisateur. Le choix du multithreading ou asynchrone dépend de la nature de la tâche: les tâches à forte intensité de calcul utilisent le multithreading, les tâches qui interagissent avec les ressources externes et doivent maintenir la réactivité de l'interface utilisateur à utiliser asynchrone.
