Une brève introduction à la délégation, aux événements et à l'utilisation asynchrone en C#

黄舟
Libérer: 2017-03-24 11:17:40
original
1834 Les gens l'ont consulté

Cet article présente principalement les connaissances pertinentes sur la délégation, les événements et l'asynchrone en C#. A une très bonne valeur de référence. Jetons un coup d'œil avec l'éditeur ci-dessous

Cela fait presque un an que je suis entré en contact pour la première fois avec la programmation C#. Dans le processus d'apprentissage, il y a beaucoup de choses qui ont toujours été paradoxales, et je ne les ai comprises que récemment.

Cet article présentera d'abord l'utilisation, puis évaluera la fonction.

1. Délégué

Utilisation de base :

1. Les délégués sont comme des « classes ». Après avoir déclaré un délégué, vous pouvez créer plusieurs délégués avec cette caractéristique. (Les fonctionnalités font référence aux valeurs de retour et aux types de paramètres)

public délégué void SomeKindOfDelegate(<a href="http://www.php.cn/wiki/57.html" target=" _blank">string<code>public delegate void SomeKindOfDelegate(<a href="http://www.php.cn/wiki/57.html" target="_blank">string</a> result); result);

2. Créez un délégué du type de délégué créé en 1.

public SomeKindOfDelegate aDelegate;

3. Ajoutez la fonction de réponse au délégué spécifique créé en 2. La fonction de réponse doit être conforme aux « caractéristiques » de 1.

aDelegate +=new SomeKindOfDelegate(aFunctionThatJustForDelegate);
private void aFunctionThatJustForDelegate(string result)
{
MessageBox.Show(result);
}
Copier après la connexion

4. Après avoir terminé les trois étapes ci-dessus, vous pouvez utiliser Invoke pour appeler le délégué. Invoke peut choisir la fonction cible à appeler, la priorité d'appel et les paramètres d'appel.

aDelegate.BeginInvoke("Hello~I&#39;m being invoked!", null, null);

Ce qui précède est l'utilisation de base. En plus de cette utilisation de base, vous pouvez également combiner var, délégation anonyme, délégation lambda et d'autres méthodes.

Code complet :

namespace wtfIsDelegate
{
 public delegate void SomeKindOfDelegate(string result);
 public partial class Form1 : Form
 {
  public event SomeKindOfDelegate aDelegate;
  public Form1()
  {
   InitializeComponent();
   aDelegate +=new SomeKindOfDelegate(aFunctionThatJustForDelegate);
   aDelegate.BeginInvoke("Hello~I&#39;m being invoked!", null, null);
  }
  private void btnDelegate_Click(object sender, EventArgs e)
  {
  }
  private void aFunctionThatJustForDelegate(string result)
  {
   MessageBox.Show(result);
  }
 }
}
Copier après la connexion

Utilisation de la délégation :

L'avantage de la délégation est qu'elle peut implémenter de l'asynchrone (BeginInvoke), et elle peut également être utilisé dans une certaine mesure pour simplifier le code lorsque plusieurs appels avec les mêmes paramètres et valeurs de retour doivent être effectués en même temps.

2. Événements

Utilisation de base :

1.

public delegate void SomeKindOfDelegate(string result);

2. Définir les événements.

public event SomeKindOfDelegate aDelegate;

3. Ajouter une fonction de réponse à l'événement.

process.Exited += new EventHandler(CmdProcess_Exited);

4. Spécifiez la méthode de déclenchement (appel) de l'événement. ([Vous pouvez également invoquer directement sans déclencher])

Explication :

En C#, chaque type d''Event' correspond probablement à son 'Gestionnaire d'Event ou EventHandler'. Par exemple, l'événement OutputDataReceived de la classe Process correspond au DataReceivedEventHandler. Pour les « événements » non spécifiques, tels que PasswordChanged, ils correspondent tous à des « gestionnaires d'événements » plus généraux tels que RoutedEventHandler ou EventHandler. Cependant, 'EventHandler' n'agit que comme intermédiaire. Que faire après le déclenchement de 'Event', nous devons encore le spécifier manuellement, comme ceci :

process.Exited += new EventHandler(CmdProcess_Exited); // 注册进程结束事件 。
Copier après la connexion

EventHandler est également un délégué. Par exemple,

public delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e);
Copier après la connexion

Événement personnalisé

L'événement personnalisé est une méthode similaire à la délégation,

Événements auto-définis modifie le flux du programme dans un sens, changeant le changement d'une certaine condition d'une « requête continue » à une relation « d'abonnement et de traitement ».

Un événement personnalisé nécessite les éléments suivants :

L'initiateur de l'événement, l'abonnement à l'événement et le gestionnaire de l'événement. Les paramètres peuvent être transmis de l’initiateur au gestionnaire.

Le « déclenchement » d'un événement peut dépendre d'une sorte de message système, tel que « OnKeyDown », « OnMouseClick » ([Je n'ai pas vu de code source écrit comme celui-ci]) , et Il peut être appelé par lui-même lorsqu'une certaine condition est remplie (par exemple, le même caractère est saisi deux fois) (en fait, la réception d'un message système est également considérée comme une « condition remplie »). [D'autres événements sont écrits comme ceci]

Certains événements n'ont pas d'« initiateur » évident.

Quelle est la relation entre la délégation et les événements ?

L'utilisation de la délégation et des événements personnalisés est très similaire. L'événement ne peut être invoqué qu'à l'intérieur de la classe. S'il s'agit d'un délégué, il peut être invoqué n'importe où. La méthode d'appel semble être légèrement différente (méthode de passage de paramètres)

En raison de la différence entre la méthode d'appel et le passage de paramètres, l'événement semble être plus conservateur/stable. Les événements sont également plus faciles à « comprendre » et à accepter.

le délégué semble être plus utilisé pour l'asynchrone (commencer l'invocation). L'événement est davantage utilisé pour les événements personnalisés.

Quelle est la relation entre la délégation et l'asynchrone

L'asynchrone est une fonction que la délégation peut réaliser (ou elle peut être appelée un « phénomène asynchrone »). de nombreuses autres manières, comme le multithreading (thread, threadpool, tâche, etc.).

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!

Étiquettes associées:
source: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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!