多播委托不明确

Multicast Delegate Ambigous

我有以下代码

    StringOperations sumString, reverseString, lowerString, upperString, multicastString;

    sumString = new StringOperations(sum);
    reverseString = new StringOperations(reverse);
    lowerString = new StringOperations(lower);
    upperString = new StringOperations(upper);

    multicastString = upperString + lowerString + reverseString + sumString;

    int count = 4;

    if (!checkBox1.Checked)
    {
            multicastString -= upperString;
            count--;
    }
    if (!checkBox2.Checked)
    {
            multicastString -= reverseString;
            count--;
    }
    if (!checkBox3.Checked)
    {
            multicastString -= lowerString;
            count--;
    }
    if (!checkBox4.Checked)
    {
            multicastString -= sumString;
            count--;
    }
    if (count > 0)
    {
            string test = multicastString(textBox1.Text);
    }

当大写和小写复选框被 selected 时,它只显示小写函数的结果。

如果我 select 大写、小写和反向复选框,那么它只显示反向功能的结果。

我的delegate低于

delegate string StringOperations(string str);

我正在使用多播委托并返回 string,如上面的代码所示。请让我知道我做错了什么?

当您有一个附加了多个处理程序的委托时,您仍然只会获得一个 return 值。没有直接的方法来获取其他值,自然您不能以将一个的 return 值发送到另一个的方式链接处理函数。您唯一会得到的是最后一个附加处理程序的 return 值是 returned.

这里真的没有模棱两可的行为,这就是它的工作方式。如果你想链接函数,你必须使用不同的方法然后是委托。在此示例中,您只需调用函数即可。

在多播委托中,方法应具有 void 作为 return 类型,因为它不会混合值。所以方法签名会改变

来自

delegate string StringOperations(string str);

delegate void StringOperations(string str);

PS: 也将其他委托方法的return类型改为void.