2015-12-16 2 views
0

Pouvons-nous utiliser des délégués de multidiffusion en utilisant des génériques? S'il vous plaît expliquer avec le code ci-dessous comment c'est possible.Délégués de multidiffusion

delegate string multidelegate<T1,T2>(T1 a,T2 b); 

class mylogic 
{ 
    public void Method1(int a, int b) 
    { 
     Console.WriteLine("This is Method1 where value of multiplication is {0}",a*b); 
    } 

    public void Method2(double a, double b) 
    { 
     Console.WriteLine("This is Method2 where the value of multiplication is {0}",a*b); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     multidelegate<int,int> del = new multidelegate<int,int>(new mylogic().Method1).Tostring(); 
     del += Convert.ToString(new multidelegate<double,double>(new mylogic().Method2).Tostring()); 

     del(32,51); 
    } 
} 
+2

Sauf si vous parlez des gens en Inde qui traversent les frontières sociales, je pense que vous voulez dire « multicast », pas « Multicaste » –

Répondre

2

Tous délégués en C# sont délégués multicast, et vous pouvez avoir des délégués génériques, donc oui, vous pouvez avoir des délégués de multidiffusion génériques. Tous les délégués génériques sont des délégués multicast génériques.

Cependant, vous ne pouvez pas combiner deux instances d'un délégué générique si elles ont des arguments génériques différents. Vous pouvez uniquement combiner des instances du même délégué avec les mêmes arguments de type générique. Cela devrait avoir du sens puisque le point de pouvoir combiner des délégués est qu'ils doivent avoir le même contrat; ils doivent accepter les mêmes arguments et produire le même type de sortie. Si les arguments génériques sont différents, ce ne serait pas le cas. Pouvons-nous utiliser des délégués de multidiffusion en utilisant Generics?

-1

Oui Les délégués multidiffusion consistent à appeler plusieurs abonnés via votre délégué et à renvoyer le résultat de l'appel au dernier abonné.

Vous devez utiliser votre délégué Func à la place multidelegate

+1

Le code montré tout simplement pas compiler, pour plusieurs raisons, alors non, il ne fera pas ce que vous prétendez. – Servy