多播代表

时间:2015-12-16 17:28:45

标签: c# delegates multicastdelegate

我们可以使用泛型使用多播委托吗?请用以下代码解释如何实现。

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 个答案:

答案 0 :(得分:2)

C#中的所有委托都是多播委托,您可以拥有通用委托,所以是的,您可以拥有通用多播委托。所有通用委托都是通用多播委托。

但是,如果它们具有不同的泛型参数,则无法组合泛型委托的两个实例。您只能将同一委托的实例与相同的泛型类型参数组合在一起。这应该是有道理的,因为能够组合代表的全部意义在于他们需要拥有相同的合同;他们需要接受相同的参数并输出相同类型的输出。如果泛型参数不同,那就不是这种情况。

答案 1 :(得分:-1)

我们可以使用泛型使用多播委托吗? 多播代理是通过您的代理呼叫多个订户并将呼叫结果返回给最后一个订户的操作。

您应该使用Func委托代替您的multidelegate