0

我们可以使用泛型使用多播委托吗?请用下面的代码解释它是如何可能的。

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);
    }
}
4

2 回答 2

2

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

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

于 2015-12-16T18:40:45.073 回答
-1

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

您应该使用 Func 委托而不是您的多委托

于 2015-12-16T19:04:04.053 回答