 |
 |
Délégués dans C#. Filet :
|
Si nous regardons C++ il y a un dispositif appelé la fonction de rappel de service. Ce dispositif emploie des indicateurs aux fonctions pour les passer comme paramètres à d'autres fonctions. Le délégué est un dispositif semblable mais c'est plus de type coffre-fort, qui se tient car un contraste rigide avec des indicateurs de fonction de C++. Un délégué peut tenir reference/s sur un plus plus de fonctions et les appeler au fur et à mesure que cela est nécessaire.
|
Un délégué a besoin de ses paramètres de la méthode du nom et (des variables d'entrée et de rendement) quand nous créons un délégué. Mais le délégué n'est pas une construction autonome. c'est une classe. N'importe quel délégué est hérité de la classe basse de délégué de la bibliothèque de classe de .NET quand on lui déclare. Ceci peut être de des deux classes de System.Delegate ou de système. MulticastDelegate.
|
Si le délégué contient un type de retour de vide, alors il est aliased automatiquement au type de System.MulticastDelegate. Ceci peut soutenir des fonctions multiples avec un opérateur de +=. Si le délégué contient un type de retour non-vide puis il est aliased au système. La classe et lui de délégué ne peuvent pas soutenir des méthodes multiples.
|
Allons voir le code suivant d'échantillon.
|
class Figure
{
public Figure(float a, float b, float c)
{
m_xPos = a;
m_yPos = b;
m_zPos = c;
}
public void InvertX()
{
m_xPos = - m_xPos;
}
public void InvertY()
{
m_yPos = - m_yPos;
}
public void InvertZ()
{
m_zPos = - m_zPos;
}
private float m_xPos = 0;
private float m_yPos = 0;
private float m_zPos = 0;
}
|
|
Maintenant, nous avons une classe appelée Figure et elle a trois champs privés qui emploient pour stocker la position et trois méthodes pour inverser cette position par chaque axe. Dans la classe principale nous déclarons le délégué comme suit :
|
public delegate void FigureDelegate();
|
|
Et maintenant dans la fonction principale nous devrions l'employer aimons ceci :
|
Figure figure = new Figure(10,20,30);
FigureDelegate fx = new FigureDelegate(figure.InvertX);
FigureDelegate fy = new FigureDelegate(figure.InvertY);
FigureDelegate fz = new FigureDelegate(figure.InvertZ);
MulticastDelegate f_del = fx+fy+fz;
|
|
Dans cet exemple nous créons trois délégués de type de FigureDelegate et attachons à ces éléments nos trois méthodes de figure classe. Maintenant chaque délégué garde l'adresse de la fonction jointe. La dernière ligne du code est très intéressante, ici nous créons un délégué de type bas (MulticastDelegate) et attachons trois de nos délégués déjà créés. Pendant que toutes nos méthodes sont de type de retour de vide elles sont automatiquement de type MutlticastDelegate et un MulticastDelegate peut soutenir l'invocation multiple de méthodes également. Par conséquent nous pouvons écrire
|
Figure figure = new Figure(10,20,30);
FigureDelegate fMulti = new FigureDelegate(figure.InvertX);
fMulti += new FigureDelegate(figure.InvertY);
fMulti();
|
|
 |
 |
Keywords Delegates in C# .Net, c# c++, c# dotnet, c# type, c# datagrid, c# object, delegates vb,
c# value, visual c#, c# method, c# control, c# example, vb c#, system c#, c# application,
c# sample, c# project, c# form, convert c#, csharp c#, custom c#, add c#, c# create
|