调用带返回值的委托
调用列表中最后一个方法的返回值就是委托调用最终的返回值。
调用列表中其它所有方法的返回值都会被忽略(覆盖)
委托签名中的参数列表不为空时,需要区分该参数是值类型还是引用类型。若为引用类型参数,该参数的值可能会根据调用列表中的一个或多个方法而发生改变。需要仔细分析。
带返回值的Numtest类,无输入参数
internal class NumTest
{
public static int NumMethod1()
{
Console.WriteLine("方法1被执行!!!");
return 10;
}
public static int NumMethod2()
{
Console.WriteLine("方法2被执行!!!");
return 11;
}
public static int NumMethod3()
{
Console.WriteLine("方法3被执行!!!");
return 12;
}
}
NumTest测试类
//整数委托
public delegate int NumDelegate();
static void NumDelegateTest()
{
//委托变量,持有委托对象中的方法
NumDelegate nd = NumTest.NumMethod1;
//添加方法
nd += NumTest.NumMethod2;
nd += NumTest.NumMethod3;
//调用委托
Console.WriteLine("最终返回值是"+nd());
Console.Read();
}
带返回值、带输入参数的委托
NumOperation
internal class NumOperation
{
//数字自增
public static int NumberIncrease(ref int inputNumber)
{
Console.WriteLine("自增方法执行!!");
inputNumber++;
return inputNumber;
}
//数字自减
public static int NumberDecrease(ref int inputNumber)
{
Console.WriteLine("自减方法执行");
inputNumber--;
return inputNumber;
}
}
"NumOperation测试"
//注意ref关键字的使用,这是引用类型,如果不带ref的话,就是值传递
public delegate int NumOperationDelegate( ref int inputNumber);
//数字操作类的委托测试
static void NumOperationTest()
{
int num = 1000;
//创建对象,添加方法
NumOperationDelegate numOperation = NumOperation.NumberIncrease;
numOperation += NumOperation.NumberDecrease;
Console.WriteLine("最终返回值是:"+numOperation( ref num)); ///这是引用传递:999
Console.Read();
}