我有以下代码
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);
}
当选择大写和小写复选框时,它只显示小写函数的结果。
如果我选择大写,小写和反向复选框,那么它只显示反向函数的结果。
我的delegate
位于
delegate string StringOperations(string str);
我正在使用多播委托并返回string
,如上面的代码所示。请让我知道我做错了什么?
答案 0 :(得分:2)
当你有一个附有多个处理程序的委托时,你仍然只能获得一个返回值。没有直接的方法来获取其他值,并且自然地,您不能以一个将一个的返回值发送给另一个的方式链接处理函数。您将获得的唯一内容是返回最后一个附加处理程序的返回值。
这里没有任何模棱两可的行为,只是它的工作方式。如果要链接函数,则必须使用不同的方法,然后使用委托。在这个例子中,你可以调用函数,就是这样。
答案 1 :(得分:0)
在多播委托中,方法应该有void
作为返回类型,因为它不会混合值。所以方法签名会改变
这
delegate string StringOperations(string str);
到
delegate void StringOperations(string str);
PS:同时将其他委派方法的返回类型更改为void
。