Maison >développement back-end >Tutoriel C#.Net >Explication détaillée des instances de délégué dans .net 1.x

Explication détaillée des instances de délégué dans .net 1.x

零下一度
零下一度original
2017-06-24 09:41:491517parcourir

L'article précédent a démontré l'utilisation de la délégation pour implémenter un programme de salutation multilingue. Cet article résumera l'utilisation de la délégation dans .net 1.x.

Puisque le délégué est un type (classe), il doit passer par le processus consistant à déclarer d'abord une classe, puis à créer un nouvel objet et enfin à l'appeler.

Délégué dans .net 1.x

L'utilisation de délégué dans .net 1.x est comme ceci, le code suivant :

 1 namespace DelegateDemo 2 { 3     //声明委托 4     public delegate void MyDel(string arg1, string arg2); 5  6     class Program 7     { 8         static void Main(string[] args) 9         {10             //.net 1.x中的委托11             Class1 c1 = new Class1();12 13             //创建委托对象14             MyDel myDel1 = new MyDel(c1.InstanceMethod);//实例方法15             MyDel myDel2 = new MyDel(Class1.StaticMethod);//静态方法16 17             //调用委托18             myDel1("a", "b");//或者myDel1.Invoke("a", "b");19             myDel2("a", "b");//或者myDel2.Invoke("a", "b");20 21             Console.ReadKey();22         }23     }24 25     public class Class126     {27         public void InstanceMethod(string arg1, string arg2)28         {29             Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));30         }31 32         public static void StaticMethod(string arg1, string arg2)33         {34             Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));35         }36     }37 }

À partir du code ci-dessus, nous pouvons résumer :

1. Le délégué peut accepter à la fois les méthodes d'instance et les méthodes statiques, à condition que la signature et le type de valeur de retour de la méthode correspondent au type de signature et de valeur de retour de la méthode. déléguer.

2. Il existe deux façons d'appeler un délégué. La première est essentiellement la méthode Invoke pour appeler le délégué.

Délégué d'affectation

Ce qui précède utilise new DelegateType() pour créer un délégué. En fait, une manière plus simple peut être utilisée pour créer un délégué. Le code ci-dessus pour créer un délégué peut être simplifié en :

1 //创建委托对象2 MyDel myDel1 = c1.InstanceMethod;//实例方法3 MyDel myDel2 = Class1.StaticMethod;//静态方法

Ajouter et supprimer des méthodes pour le délégué

L'exemple ci-dessus, créer un délégué Une seule méthode est initialisée.En fait, le délégué peut ajouter plusieurs méthodes.La méthode d'ajout est implémentée via '+=', et la méthode de suppression est implémentée via '-='. 🎜>

1 //创建委托对象2 MyDel myDel = c1.InstanceMethod;3 myDel += c1.InstanceMethod2;4 myDel += Class1.StaticMethod;5 myDel += Class1.StaticMethod2;
1. Une délégation en chaîne (ou délégation multicast) est composée de plusieurs délégués La classe System.MulticastDelegate est conçue pour la délégation en chaîne.

2, += appelle essentiellement la méthode Delegate.Combine.

Appeler le délégué

Appeler le délégué est aussi simple que d'appeler la méthode. Il vous suffit de transmettre les paramètres requis par le délégué. Ces paramètres seront utilisés pour appeler chaque méthode dans le. liste des méthodes du délégué, et dans l'ordre Appelé séquentiellement, le code suivant :

1 //调用委托2 myDel("aaa","bbb");
La raison pour laquelle les délégués en chaîne peuvent être appelés séquentiellement est que System.MulticastDelegate maintient en interne un pointeur vers le suivant déléguer.

Résultat de sortie :

Remarque :

1, si plusieurs méthodes identiques sont ajoutées au délégué, alors ces méthodes seront appelées à plusieurs reprises.

2. Si le délégué a une valeur de retour et que la liste des méthodes appelantes du délégué contient plusieurs méthodes, seule la valeur de retour de la dernière méthode sera renvoyée et les autres valeurs de retour seront ignorées.

Enfin, utilisez XMind pour résumer :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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