带返回值的委托调用----4

29 阅读1分钟

调用带返回值的委托

调用列表中最后一个方法的返回值就是委托调用最终的返回值。

调用列表中其它所有方法的返回值都会被忽略(覆盖)

委托签名中的参数列表不为空时,需要区分该参数是值类型还是引用类型。若为引用类型参数,该参数的值可能会根据调用列表中的一个或多个方法而发生改变。需要仔细分析。

带返回值的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();
        }