C#委托的2种调用方式

第一种:直接调用,通过invoke方法;
第二种:这是第二种将委托作为方法的参数的间接调用;
下面举个栗子演示:

using System;
using System.Collections.Generic;

namespace TestDelegate
{
    delegate int DeleInvoker(int[] vs);
    class Program
    {
        static void Main(string[] args){
            DeleInvoker deleInvoker = null;
            deleInvoker += Methods.SumAndDisplay;
           
            int[] aa=new int[20];
            for (int i = 0;i<aa.Length; i++){
                aa[i] = i + 1;
            }
            Console.WriteLine("这是第一种绑定了委托后,直接调用");
            //result=  deleInvoker(aa);//直接调用委托
            int a =(int)deleInvoker?.Invoke(aa);//判断委托是否为空,不为空则调用,《推荐》
            testDelegateParm testDelegateParm = new testDelegateParm( );
            
            Console.WriteLine("\r\n\r\n这是第二种将委托作为方法的参数的间接调用");
            testDelegateParm.tDPFunc1( deleInvoker,aa);

            Console.ReadKey();
        }
    }
    internal class Methods {
        public static int SumAndDisplay(int[] arrayX) {
            int sum = 0;
            string  equation=null;
            foreach (var item in arrayX){
                sum += item;
                if (equation==null){
                    equation = ($"{item}");
                }
                else{
                    equation = ($"{equation}+{item}");
                }
                Console.WriteLine($"{equation}={sum}");
            }
            return sum;
        }
    }

    internal class testDelegateParm {
        public static void tDPFunc1( DeleInvoker deleInvoker,int[] a ) {
        int result=(int)deleInvoker?.Invoke(a);
        }
    }
}

运行效果:

posted @ 2024-01-15 16:36  Stephen_Young  阅读(141)  评论(0编辑  收藏  举报