Auteur du concept commandé : Liang Binyu Un extrait de "C# Beginner Classroom" sera bientôt publié
[email protected]
http://www.cnblogs.com/BeginnerClassroom
Parfois, nous devons utiliser une fonction comme paramètre d’une autre fonction, nous devons alors utiliser le mécanisme de délégation. La délégation est un concept difficile à expliquer clairement. L'auteur a réfléchi pendant plusieurs jours et a finalement trouvé un exemple ingénieux.
Ensuite, nous concevons une fonction de performance de cirque RunCircus(). Son premier paramètre est une fonction représentant un animal. Quel que soit l'animal qui lui est transmis, la performance de cet animal sera exécutée. Veuillez créer un nouveau projet nommé « Délégué » et ajouter le code suivant.
Essayez-le : définir des délégués
//"Classe C# pour débutants"
//Fonction : exposition canine
static void DogAct (nom de chaîne)
{
Console.WriteLine("Bonjour, je suis " + nom + "!");
Console.WriteLine (@"
.----.
_.'__`.
.--(#)(##)---/#
.' @ /###
: , #####
`-..__.-' _.-###/
`;_ :`''
.''''''''`.
/,Snoopy,
// COOL! \
`-._______.-'
___`.
(______|______)");
}
//Fonction : exposition féline
CatAct vide statique (nom de chaîne)
{
Console.WriteLine("Bonjour, je suis " + nom + "!");
Console.WriteLine (@"
.-.__ _ .-.
` / |
/ '.()--
|'._/
_|
= '-' /=
'-._____.-'
/`/___/`
//o o/
(_| |_)
|____,____|
(____|____)");
}
//Fonction : spectacle de lion
LionAct vide statique (nom de chaîne)
{
Console.WriteLine("Bonjour, je suis " + nom + "!");
Console.WriteLine (@"
,%%%%%%%%,
,%%/%%%%/%%
,%%%c "" J/%%%
%%%%/ o o %%%
`%%% _ |%%%
`%% `%%%%(__Y__)%%'
// ;%%%%`-/%%%'
(( / `%%%%%%%'
\ .' |
\ / |
\/ ) |
/_ |__
(____________)))))))");
}
//définir un délégué
délégué void AnimalAct (nom de chaîne);
//Fonction : représentation de cirque (le premier paramètre est le délégué de type AnimalAct)
static void RunCircus (AnimalAct animalAct, nom de chaîne)
{
animalAct(nom);
}
static void Main(string[] arguments)
{
//Convertir la fonction DogAct() en délégué de type AnimalAct
AnimalAct deleDogAct = new AnimalAct(DogAct);
//Passez le délégué deleDogAct à la fonction RunCircus()
RunCircus(deleDogAct, "Snoopy");
//Convertit la fonction CatAct() en délégué de type AnimalAct et passe-la à la fonction RunCircus()
RunCircus(nouveau AnimalAct(CatAct), " Kitty ");
}
Les résultats en cours d'exécution sont les suivants :
"Cours C# pour débutants"
Le premier paramètre de la fonction RunCircus(AnimalAct animalAct, string name) est en fait une fonction représentant un animal. Le type de fonction qui lui est transmis utilisera le type d'animal à exécuter. Mais pour effectuer une vérification de type stricte, nous ne pouvons pas lui transmettre directement le nom de la fonction, mais devons d'abord définir un délégué (Dlelegate), c'est-à-dire définir un "type de fonction".
Le délégué est déclaré avec le mot-clé délégué. L'instruction ci-dessus définit un délégué (type de fonction) appelé AnimalAct, qui spécifie clairement le type de paramètre et le type de valeur de retour du délégué. Lorsque nous devons utiliser une fonction comme paramètre, nous devons d’abord la convertir en instance déléguée.
Cette instance de délégué est ensuite passée en paramètre à la fonction qui l'appelle.
On peut voir que l'instance déléguée deleDogAct est en fait un alias de la fonction DogAct(). Évidemment, le délégué et la fonction déléguée doivent avoir le même type de paramètre et le même type de retour.
Dans notre programme, le cirque appelle toujours la fonction RunCircus() à exécuter. Lors de la définition de la fonction RunCircus(), nous ne savons pas quelle fonction représente le délégué qui lui est transmis. Cette fonction n'est pas matérialisée tant que la fonction RunCircus() n'est pas appelée et que les paramètres réels ne lui sont pas transmis. Quels que soient les paramètres qui lui sont transmis, la représentation sera exécutée. Si vous lui transmettez la délégation deleDogAct, le cirque exécutera une représentation de chien ; si vous lui transmettez une délégation deleCatAct, le cirque exécutera une représentation de chat ; une délégation deleLionAct, le cirque réalisera un spectacle de chats. Le cirque a réalisé un spectacle de lions. Par conséquent, les fonctions qui prennent des délégués comme paramètres ont une certaine généralité.