Les délégués est comme pointeur fonction c et c ++.
Programmeur utilise des délégués pour encapsuler mention la méthode dans les délégués object.Then délégués objet passe à la méthode de référence appropriée de code et d'appel et invoqué cette méthode qui n'est pas savoir au moment de la compilation.
Voici des exemples d'appel de la méthode simple en c#
à l'aide du système.
espace de noms withoutDelegate
{
public class Class1
{
public Process() void
{
Console.WriteLine ("processus commencer").
Console.WriteLine ("fin de processus") ;
}
}
public class test
{
static void main (string [] args)
{
Classe1 myClass = nouvelle Class1() ;
myClass.Process() ;
}
}
}
Cela fonctionne bien dans la plupart des situations.Parfois, cependant, nous ne voulons pas d'appeler une fonction directement - nous serait en mesure de transmettre à quelqu'un d'autre, donc ils peuvent appeler.Cela est particulièrement utile dans un système évènementielle, comme une interface utilisateur graphique, lorsque je veux un code à exécuter lorsque l'utilisateur clique sur un bouton, ou lorsque j'essaie de se connecter des informations, mais ne peut pas expliquer comment il est connecté
Dans les délégués, il y a deux types de délégués.
Délégués de SingleCast 1)
Délégués multicast 2)
Une chose intéressée sur les délégués est qu'il ne sait pas sur la classe de l'objet qu'il référence, comme tout autre objet do.All cette chose dépendent de paramètre de méthode et de type retour de méthode qui correspond à la signature des délégués.
Une signature de délégués des interprètes unique est :
déléguer l'identificateur de retour-type (paramètre)
ex : déléguer int calculer (int a, b int).
En plus exemple « int » est de type de retour de fonction, calculer est le nom de Deletate et l'int a et b de l'int sont le paramètre du délégué.
Quand nous voulons utiliser les délégués dans notre programme, tout d'abord nous devons définir la signature de méthode asigning et derniers invoquant les délégués.
3 Étapes :
-Declaration(Define Signature of Delegates)
-Instantiation(Asigning Method to delegate)
-Invoking(Invoking Delegate object so we dynamicall call method)
espace de noms délégué
{
/ / Déclaration
public delegate void MyDelegate() ;
classe TestDelegate
{
public MyFunc() void statique
{
Console.WriteLine ("j'ai été appelé par délégué...") ;
}
public main() void statique
{
/ / Instanciation
MyDelegate myDelegate = nouvelle MyDelegate(MyFunc) ;
/ / Appel
myDelegate() ;
}
}
}
Considérez l'exemple simple :
Espace de noms myNamespace
{
/ / et n'a aucun type de retour.
délégué public void myHandler(string message) ;
Et l'utilisation du délégué est comme l'appelant une fonction directement,
/ / Si nous devons ajouter une vérification pour voir si le délégué est null
/ / (c'est-à-dire ne pas pointer vers une fonction) avant d'appeler la fonction.
public void processus (gestionnaire de myHandler.)
{
Si (Handler! = null)
{
Handler("Process() commencer").
}
Si (Handler! = null)
{
Gestionnaire d'événements ("Process() fin").
}
}
}
/ / Tester l'application à utiliser le délégué défini
public class MonApplication
{
/ / Fonction statique: À qui est utilisée dans le délégué.Pour appeler la Process()
/ / fonction, nous avons besoin déclarer une fonction de journalisation : Logger() qui correspond à
/ / la signature du délégué.
static void Logger (chaîne s)
{
Console.WriteLine(s) ;
}
static void main (string [] args)
{
MyClass myClass = nouvelle MyClass() ;
/ / Crate une instance du délégué pointant vers la fonction de journalisation.
/ / Ce délégué sera ensuite passé à la fonction Process().
MyClass.myHandler myLogger = MyClass.myHandler(Logger) nouveau ;
myClass.Process(myLogger) ;
}
}
}
En multidiffusion Deletates, nous pouvons références plus d'une méthode aux délégués, mais ici une chose que nous devons nous rappeler que toute méthode ont même signature délégués.
Exemple : multidiffusion délégué :
Fonction de délégué public calculer (ByVal un As Integer, ByVal b As Integer) As Double
Public Class Delegateclass
Ajout de la fonction publique (ByVal un As Integer, ByVal b As Integer) As Double
Console.WriteLine(a + b)
Fonction de fin
Soustraire de la fonction publique (ByVal un As Integer, ByVal b As Integer) As Double
Console.WriteLine (a - b)
Fonction de fin
Classe de fin
Sub Main()
Dim myDlegateClass As New Delegateclass
Dim delAdd As New calculer (AddressOf myDlegateClass.Add)
Dim delSub As New calculer (AddressOf myDlegateClass.Subtract)
Dim delCalculate as calculer = DirectCast ([délégué] .Combine (delAdd, delSub), calculer)
delCalculate.Invoke (5, 3)
Console.ReadLine()
Fin Sub
}