4

我有以下代码

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

When uppercase and lowercase checkboxes are selected then it only show me lowercase function's result.

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

delegate的在下面

delegate string StringOperations(string str);

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

4

2 回答 2

2

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

这里真的没有模棱两可的行为,它就是它的工作方式。如果要链接功能,则必须使用与委托不同的方法。在这个例子中,你可以只调用函数,就是这样。

于 2015-08-15T18:34:01.573 回答
0

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

delegate string StringOperations(string str);

delegate void StringOperations(string str);

PS:另外将其他委托方法的返回类型更改为void.

于 2015-08-15T20:23:17.747 回答