Maison développement back-end Tutoriel C#.Net Compilation des connaissances de base C# Connaissances de base (20) Délégation (1)

Compilation des connaissances de base C# Connaissances de base (20) Délégation (1)

Feb 11, 2017 pm 01:59 PM

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));
        }
Copier après la connexion

Utilisez Java,

        public void JavaProgramer(string programerName)
        {
            Console.WriteLine(string.Format("{0} 使用Java语言编程!"));
        }
Copier après la connexion

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
    }
Copier après la connexion

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
    }
Copier après la connexion

Appelez :

            ProgramerDescription pm = new ProgramerDescription();

            pm.Description("杨友山", ProgramLanguage.CSharp);
Copier après la connexion

À 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) ?

Bien sûr on pense au délégué en C#. Un délégué est une structure de données qui fait référence à une méthode statique ou fait référence à une instance de classe et aux méthodes d'instance de cette classe. Utilisez un délégué pour compléter le code ci-dessus :



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);
        }
    }
Copier après la connexion

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);
Copier après la connexion

Examinez attentivement le code en utilisant le délégué,
public void Description(string programerName, DescriptionDelegate description). Lors de l'appel, la description

DescriptionDelegate est transmise dans pm.CsharpProgramer, c'est-à-dire description=pm.CsharpProgramer à ce moment-là. En fait, on peut aussi l'appeler ainsi :



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);
Copier après la connexion

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);
Copier après la connexion

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.

Utilisez = pour lier la méthode et utilisez -= pour annuler L'appel ci-dessus peut être modifié comme suit :



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);
Copier après la connexion
Ce qui précède est le contenu de la compilation des connaissances de base C# Connaissances de base (20) Commission (1) Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Active Directory avec C# Active Directory avec C# Sep 03, 2024 pm 03:33 PM

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.

Sérialisation C# Sérialisation C# Sep 03, 2024 pm 03:30 PM

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.

Générateur de nombres aléatoires en C# Générateur de nombres aléatoires en C# Sep 03, 2024 pm 03:34 PM

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.

Vue Grille de données C# Vue Grille de données C# Sep 03, 2024 pm 03:32 PM

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.

Modèles en C# Modèles en C# Sep 03, 2024 pm 03:33 PM

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.

Factorielle en C# Factorielle en C# Sep 03, 2024 pm 03:34 PM

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.

Nombres premiers en C# Nombres premiers en C# Sep 03, 2024 pm 03:35 PM

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 le C # asynchrone La différence entre le multithreading et le C # asynchrone Apr 03, 2025 pm 02:57 PM

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.

See all articles