c 什么时候用委托(c#中委托的作用是什么)

本文目录
c#中委托的作用是什么
使用委托的作用:使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
委托和事件在.NET Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。
扩展资料:
委托的本质:
在C#中使用delegate关键字定义委托,然后使用我们熟悉的函数调用的语法来调用委托,如上述例子中的cb(“skynet”,23)。在这简单的表象背后,.NET编译器可以知道定义CallBack委托时,编译器为我们做了如下工作,实际上定义任何委托编译器都会做如下工作:
声明一个类,对应上图中的.class nested public auto ansi sealed。该类扩展自System.MulticastDelegate,对应上图中的extends System.MulticastDelegate。
该类包含一个构造器,对应上图中的.ctor: void(object ,native int)。该类包含三个方法,分别是BeginInvoke、EndInvoke、Invoke。
委托 c# 再什么时候用
委托应该属于高级编程的部分了,我也是查了很久,大部分人好像根本不明白,就是复制别人的东西,关键部分都很笼统,就我的了解简单的和你说一下吧,不是太专业,不过你应该可以看明白!
-----------------------------------------------------------
委托 在net框架中其实就是一个类,所以定义的时候你可以随便找个地方定义,比如在其他的类里面或者直接在命名空间下定义都可以;另外既然它也是类,所以使用的时候你就要实例化它,例如:
delegate int MyDelegate(int i);
//上面这句就是声明一个委托,其中网上所谓的签名就是指的返回类型int和参数int i;这个委托声明后,只能和签名相同的方法绑定使用,例如:
//其中myMethod就是你在后面要调用的方法了,它的签名必须和委托的一致,即拥有相同的返回类型和参数
public int myMethod(int j)
{
return ++j;
}
在实例化委托的地方就可以直接调用方法
MyDelegate MyD=new MyDelegate("myMethod");//实例化
MyD(5);//这里其实调用的就是meMethod方法,返回6;
--------------------------------------------------------------
对于使用程序结构 大致可以理解了吧?
对与你的问题,在什么地方什么时候使用委托呢?
首先说在net框架中,委托经常和事件绑定使用,所以它是实现框架中事件处理机制的基础。具体的使用简单的几句是说不清楚的。
net中有自己的规范,如事件参数要继承EventArgs类,事件多以EventHandler结束等等,想往深里研究的话,可以到msdn文档库中查看相关资料进行学习。
如果自己编写框架类项目时,也可以有自己的规范,比如在你想动态执行某个方法的时候就可以使用委托;举个简单的例子:
public int myMethod(int j){}
这个方法的参数是int类型的,所以你只能传递int行的参数,如果你将int改为MyDelegate即:public int meMethod(MyDelegate j){};//MyD就是上面我们定义的委托
这样你就可以将和委托具有相同签名的方法传递给这个myMethod方法了,由于时间关系说的不是太细致,如果有问题可以一起通过baidu HI探讨,给我留言也可以。
全部手写的,你仔细看一下,但愿可以帮助你,互相学习!
另外加一句,很多教材把委托比喻为邮局,这个理解挺形象的,就是托邮局帮我们做某件事情,然后反馈给我们相关的信息,委托和事件绑定基本就是这样,通过委托订阅我们感兴趣的信息等等。

更多文章:
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00
怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)
2026年9月7日 06:30
vba编写excel插件(excel vba中能否动态创建控件)
2026年9月7日 04:40






