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);
}
}
}
运行效果: