委托

委托:是一种储存函数引用的类型。
           是一种储存返回值与参数列表一致的函数引用类型。

委托的使用分为两种:1.定义委托

                                    2.使用委托

1.定义委托

delegate  定义委托的关键字

注意:定义委托是没有方法体的

//定义了一个没有返回值,没有参数的委托
delegate void Mydg();
//有参数的委托
delegate void Mydg1(int a,int b);
//有返回值有参数的委托
delegate double Mydg2(double a,double b);

2.使用委托

第一种
将方法Test委托给了Mydg这个委托
Mydg这个委托就相当于储存了这个Test函数的引用

      Mydg md =new Mydg(Test);

第二种
注意:在将函数 赋值给委托时,一定不能加(),因为函数加()是函数的调用
 

 Mydg mdg;
 mdg =Test;//无参数无返回值的方法传递
 //Mydg md2;
 //md2 =Test;  // 报错原因: 因为参数列表不对应
 Mydg1 mdg1;
 mdg1 =Test;//有参数无返回值的方法传递
 Mydg2 mdg2;
 mdg2 = Test;//有返回值有参数的方法传递

使用委托调用指向的这个方法,怎么用?

mdg();//无参数无返回值委托调用
mdg1(10, 20);//有参数无返回值委托调用
Console.WriteLine(mdg2(10.1, 20.1));//有参数有返回值委托调用

自定义方法

//无返回值,无参数的方法
public static void Test()
{
    Console.WriteLine("Test");
}
//无返回值,有参数的方法
public static void Test(int a,int b)
{
    Console.WriteLine(a+b);
}
//有返回值有参数的方法。函数的重载与有无返回值无关
public static double Test(double a, double b)
{
    return (a + b);
}

3.使用委托有没有限制?任意一个方法都可以赋值给委托吗?限制是什么?

定义委托的返回值和参数列表与方法的返回值和参数里列表必须一致,这样才能将一个方法赋值给委托。
然后这个委托指向这个方法,如果返回值和列表不一致,就会报错。

Mydg md2;
md2 =Test;  // 报错原因: 因为参数列表不对应

委托数组

//演示:
//声明委托数组    可以储存多个函数的引用
Mydg2[] mds = new Mydg2[5];
mds[0] = Test;
//调用
mds[0](20, 30);
//委托也可以当作参数传递到一个函数里
show(mds);

show方法

static void show(Mydg2[] marr) 
{
    foreach (Mydg2 item in marr)
    {
        Console.WriteLine(item);
    }
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐