C# Pointeur de fonctions, Delegate Multicast pourquoi?

Hello,

je suis relativement nouveau en C# mais j’ai été surpris de découvrir ça:

namespace DelegateTest
{
	class Program
	{
		private delegate void FunctionPointer();
		private static FunctionPointer _myFunction;
		private static void Test1()
		{
		}
		private static void Test2()
		{
		}
		static void Main(string[] args)
		{
			_myFunction += Test1;
			_myFunction += Test2;
			_myFunction();
		}
	}
}

Un delegate par défaut peut avoir plusieurs target! Du coup c’est un peu plus qu’un bête pointeur de fonction comme on connaissait en C/C++. voir aussi ici http://msdn.microsof…=vs.100%29.aspx
Bon, après tout pourquoi pas.

Par contre si je veux forcer mon delegate à n’avoir qu’une seule cible, je fais comment?
C’est à dire que je voudrais lors de la compilation que le

_myFunction += Test1; génère une erreur et que seul

_myFunction = Test1 soit autorisé.

Tu regardes la doc des delegate C#, avec aussi en mot clé MultiCastDelegate, etc.

Autre question, est-ce que tu peux donner un peu plus d’infos sur ce que tu essaies de faire avec tes delegate?

Parce que, “je débute en C#” et delegate ça colle moyennement pour moi, tu n’es sûr que tu ne pars pas sur un truc overkill?

Euh, les delegates ça fait quand même partie des bases de ce langage. Dès que tu as besoin d’un observer (nottamment dès que tu fais un peu de GUI), tu utilises des delegates. C’est fait pour ça et c’est bien pratique (même si pas forcément intuitif au début).

C’est meme la avant les generics :stuck_out_tongue:

En tant que développeur java, je valide totalement.

Moui, mais pour la GUI (surtout pour WinForms) tu as les EventHandler génériques et depuis ça fait un moment que je n’ai pas explicitement déclaré un delegate.

Je dis pas que les delegate son inutiles, loin de là, mais simplement que tomber sur une problématique de limiter le nombre de target d’un delegate en débutant ça me semblait un peu étrange.

Vu sous cet angle, soit, c’etait probablement pour faire du code crade, genre j’ajoute mes handlers sans jamais les enlever mais le truc derriere s’assure qu’il n’y en a toujours qu’un.
Ou alors un truc vachement plus complexe et le monsieur est tres humble, parce que c’est pas expert, mais pas debutant non plus. Apres, il a du trouver sa reponse rapidos, dans la mesure ou il n’a pas reposté ici, et ou l’implé d’un multicast delegate est a peu pres super simple et developpée partout.

Oui c’est pas un truc de debutant, c’est plus souvent un truc que les gens qui font du C++ et qui se mettent au C# ont envie d’utiliser partout et ca fini plus en anti-pattern qu’autre chose…