您的位置:首页 > 编程语言 > C#

c#委托

2015-08-02 20:23 323 查看
      委托(delegate)是一种引用类型,我们在处理他的时候要当作类来看待而不是方法,说白了委托就是对方法或者方法列表的引用,调用一个委托实例就好像是调用c++中的指针一样,他封装了对制定方法的引用,或者说委托起到的是桥梁的作用,实例后的委托对象会将给定的参数传递给他所回调的方法,并去执行方法。【方法作为参数进行传递,类似函数指针】
       看一个简单的例子:
     //声明一个委托

    delegate int myDelegateHandler(int a, int b);
    public class A

    {

        //静态的处理方法

        public static int M1(int a, int b)

        {

            int c = 0;

            c = a + b;

            return c;

        }

    }

    //入口类

    public class B

    {

        public static void Main()

        {

            //实例一个委托

            myDelegateHandler mdh = new myDelegateHandler(A.M1);

            //调用委托

            int sum = mdh(2, 2);

            Console.WriteLine(sum.ToString());
        }

    }
    上面是一个非常简单的例子,具体的实现步骤:
           1、 先声明个委托实例  ;
           2、然后提供要处理的方法;
           3、再实例化委托(把委托看作是类的话,实例化委托就不难理解了,其参数是要处理的方法,这里的方法 不用加括号,实例化的过程就是装载方法的过程,就好像需要参数的构造函数一样)实例化后的委托对象就好比是c++中的指针,它本身就是封装了方法的对象;
          4、最后我们调用委托对象就好比是调用了被封装方法本身,调用时的参数也就传给了被封装的方法。

           5、需要注意的是 所声明的委托无论是 参数个数,参数类型,返回值类型 都要和所要封装的方法保持一致,当调用委托实例对象时,所传入的参数也要保持一致 ,否则会出现错误。 

 
 委托链
        我们知道委托是对方法的封装,而且委托可以封装很多方法形成委托链,其实委托就好像是一个容器,他封装了我们想要实现的若干方法,当调用委托对象(相当于c++中的指针)时,就会顺序的执行它所封装的所有的方法,如果有返回值的话,往往返回的是最后一个被执行的方法的返回值,委托链的形成可以用"+="或"-="对不同的委托实例进行二元操作。委托链只是把多个委托链接在一起。
namespace Delegate
{
class Program
{
delegate void MyDelegate(int p1, int p2);//定义一个委托类型 简单理解为一个函数指针 委托时一种类型

delegate void MyDelegate1(string a);

void Add(int p1,int p2)
{
int sum=p1+p2;
Console.WriteLine(sum);
}
static void method(MyDelegate my)//方法的参数是委托类型
{
my(1, 2);
}
static void print(string a)
{
Console.WriteLine(a);
}

static void Main(string[] args)
{
MyDelegate d;
MyDelegate1 e = new MyDelegate1(Program.print),f=null;
d = new MyDelegate(new Program().Add);//实例化委托类型,传递的方法是方法
d(2, 3);
e("hello");
f += e;
f += e;
f("dd");

}
}
}


还是要满足两点1.参数一致 2.返回类型一致
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: