委托Delegate
在学习C#时,对于其中的委托一直没能好好的理解。现在学习C++,又遇到了同样是难点的指针。都说两者有一定的相似之处,现在,我们就来谈谈他们的区别和联系吧!
(一)委托。
一直以来对于委托的理解都如在梦中。委托,与类一样也是一种类型。
首先看一下委托的例子:
delegate int CalculateDelegate(int x, int y);
static int Add(int x, int y)
{
return x + y;
}
static void Main(string[] args)
{
CalculateDelegate cd = Add;
Console.WriteLine(cd (10, 20));
}
委托是怎么使用的呢?Main函数是要调用Add函数的,我们可以看到实际是通过cd这个委托来调用了。简而言之,就是Add的活儿让cd给代劳了。
再来理解一下委托的定义:委托就是一种引用方法的类型。委托与分配的方法具有相同的行为,委托可以看作是函数的抽象,委托的实例是一个具体的函数。
(二)指针。
我个人感觉指针比委托要更容易理解。什么是指针呢?指针就是一个特殊的变量,里面的存放的内容是地址而已。就像米老师说的“指针就是写着去哪里拿小礼物的小纸条”。
看一个例子:
char c='a';
char *p=&c;//&是<span style="font-family:KaiTi_GB2312;">取</span>地址符号,p存放的是c的地址
指针的含义很同意理解。函数指针,就是指向函数的指针。编译时,每一个函数都有一个入口,那么指向这个函数的指针指向的就是这个地址。
我们下面来区分一下指向函数的指针和委托的区别和联系!
(三)委托VS函数指针
委托和函数指针的本质上的区别还是很好理解的。在应用上的区别我们看一下。
委托和函数指针都描述了函数或者是方法,并且通过统一的接口调用不同的实现。但是,两者之间的区别还是大大的。
(1)委托是函数的抽象,委托对象是真正的对象。函数指针只是指向函数入口的地址,不具有对象性质。
(2)委托对象可以指向不同类的方法,只要符合委托要求。而C++函数不能指向不同类的方法。
(3)在应用时,C++的指针没有C#的委托灵活。
理解的还很浅,不当之处,还请大家指教!
---------------------
作者:Winter--王大梅
来源:CSDN
原文:https://blog.csdn.net/mengmei16/article/details/44137589
委托:可以用来执行方法的东西(一种类型)。把一个方法以参数的形式传递给它。和c++的指针类似。
委托是一个类型,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。