C#委托

一、什么是委托

委托是一种类型,就跟int,double,struct,string,class一样。它定义了一个函数的类型。现在,我们有一个方法,我们希望它的参数是某个函数,如下所示。

class A
{
  void public MyFuction(自定义函数,参数1,参数2)
    {
        自定义函数(参数1,参数2) ;//内部逻辑,执行该函数

    }

}

我们希望把某个自定义的函数作为参数,传到这个方法里面执行,请问如何实现?

所以,定义一个函数类型,它就是委托,它代表我们定义的参数的类型

public delegate void MyCustomFunc(int a,int b);

现在,参数的类型就有了,我们传一个参数值进去,这个参数值就是某个函数名称。

具体的实例

    public delegate void MyCustomFunc(int a, int b);//定义一种函数的参数类型

    class A
    {
        public void MyFuction(MyCustomFunc function, int a, int b)
        {
            function(a, b);//内部逻辑

        }

    }

    class B
    {
        public void Test(int a, int b)//符合该参数类型的函数
        {
            Console.WriteLine(a + b);
        }
    }

class DemoClass
    {
        static void Main(string[] args)
        {
            A a =new A();
            B b =new B();
            a.MyFuction(b.Test,5,6);//参数类型 MyCustomFunc,参数值 Test
            Console.ReadKey();
         }
  }

仔细体会,把函数作为参数,传到这个方法里面。所以我们执行 MyFuction方法时,也会执行function这个我们指定的函数。

委托是面向对象的、类型安全,是一种引用类型。

 

二、什么时候用委托

这里你可以想一下,如果你要同时执行许多函数,这些函数同时有相同的参数,相同的返回值。

比如:在ClassA中,有 public int test1 (string a, string b);

        ClassB中,有public int test2 (string a, string b)

       ClassC中,有 public  int test3(string a, string b)

    ClassD中,有public   int test4 (string a, string b)

如何让这些函数同时执行?

你会这样写:

ClassA A;
classB B;
classC C;
ClassD D;
A.test1();
B.test2();
C.test3();
D.test4();

但委托

pulic delegate int myDelegate(string a,string b);

myDategate = ClassA.test1;

myDategate += ClassB.test2;

myDategate += ClassC.test3;

这样你执行myDategate (string a,string b),所有函数都会执行

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值