通俗讲讲C#的委托?还有委托有什么实际用途

发布网友 发布时间:2022-04-23 12:39

我来回答

3个回答

热心网友 时间:2023-10-13 17:36

委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样;然后,你可以创建一个或多个该委托的实例。定义一个委托的语法是这样的:[public/protected/private] delegate returnType delegateName(paramtype param1,…)这是我自己写的,看起来好像有点怪怪的,我来解释一下,private/protected/private是限定词,就不多说了,delegate是申明一个委托的关键词,returnType是一个返回类型,delegateName是一个你给委托起的名字,你可以写任何一个你喜欢的名字,paramtype param1…这个是参数列表。说了这么多可能看起来还是不是很好理解,我是这样认为的,实用点来讲,委托定义就是在一个函数定义中间加入一个delegate的关键词。它的作用类似于你申明一个类:public class ClassName {…}创建一个委托的实例:[public/protected/private] delegateName deleInstanceName = new delegateName(MethodName)这个类似于实例化一个类,public ClassName instancename = new ClassName(…),这里有个要注意的地方,即MethodName方法要和delegateName的签名一致。什么是签名一致,就是说MethodName的参数列表,返回值要分别和returnType、(paramtype param1,…)一致。举个例子来说明下:public delegate string DelegateDemo(string name, int age);比如我们如上定义了一个委托,就写法来说,其实就是在函数 string DelegateDemo(string name, int age)前面加了一个delegate的关键字,下面我们来用创建一个函数:public string AgentDemo(string name, int age){string rev = “”;… return rev;}这个函数是做参数传递给一个DelegateDemo实例的,接下来创建一个DelegateDemo的实例:DelegateName instanceDemo = new DelegateName(AgentDemo);这时要说到一致了,即AgentDemo和声明委托时的DelegateDemo(我们姑且将delegate去掉)这两个函数的返回值,参数列表要相同。终于说完了,不知道看的人明不明白。接下来,我们可以使用这个委托了(调用一个委托),如下:string name = “cshape”;int age = 20;instanceDemo(name, age);当instanceDemo执行时,会执行AgentDemo函数,instanceDemo相当于C里的一个函数指针,现在这个指针指向AgentDemo的函数入口地址。

热心网友 时间:2023-10-13 17:36

委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样;然后,你可以创建一个或多个该委托的实例。定义一个委托的语法是这样的:[public/protected/private] delegate returnType delegateName(paramtype param1,…)这是我自己写的,看起来好像有点怪怪的,我来解释一下,private/protected/private是限定词,就不多说了,delegate是申明一个委托的关键词,returnType是一个返回类型,delegateName是一个你给委托起的名字,你可以写任何一个你喜欢的名字,paramtype param1…这个是参数列表。说了这么多可能看起来还是不是很好理解,我是这样认为的,实用点来讲,委托定义就是在一个函数定义中间加入一个delegate的关键词。它的作用类似于你申明一个类:public class ClassName {…}创建一个委托的实例:[public/protected/private] delegateName deleInstanceName = new delegateName(MethodName)这个类似于实例化一个类,public ClassName instancename = new ClassName(…),这里有个要注意的地方,即MethodName方法要和delegateName的签名一致。什么是签名一致,就是说MethodName的参数列表,返回值要分别和returnType、(paramtype param1,…)一致。举个例子来说明下:public delegate string DelegateDemo(string name, int age);比如我们如上定义了一个委托,就写法来说,其实就是在函数 string DelegateDemo(string name, int age)前面加了一个delegate的关键字,下面我们来用创建一个函数:public string AgentDemo(string name, int age){string rev = “”;… return rev;}这个函数是做参数传递给一个DelegateDemo实例的,接下来创建一个DelegateDemo的实例:DelegateName instanceDemo = new DelegateName(AgentDemo);这时要说到一致了,即AgentDemo和声明委托时的DelegateDemo(我们姑且将delegate去掉)这两个函数的返回值,参数列表要相同。终于说完了,不知道看的人明不明白。接下来,我们可以使用这个委托了(调用一个委托),如下:string name = “cshape”;int age = 20;instanceDemo(name, age);当instanceDemo执行时,会执行AgentDemo函数,instanceDemo相当于C里的一个函数指针,现在这个指针指向AgentDemo的函数入口地址。

热心网友 时间:2023-10-13 17:36

给一堆方法起个别名(即规定好了这一堆方法的返回值和参数情况)。用途嘛,event就是是个特殊的委托,像你双击出来的button_Click

热心网友 时间:2023-10-13 17:36

给一堆方法起个别名(即规定好了这一堆方法的返回值和参数情况)。用途嘛,event就是是个特殊的委托,像你双击出来的button_Click

热心网友 时间:2023-10-13 17:36

做一个asp.net实例就清楚了 一个事件需要申明委托类型,才能访问到页面的信息。我的理解是这样的。

热心网友 时间:2023-10-13 17:36

做一个asp.net实例就清楚了 一个事件需要申明委托类型,才能访问到页面的信息。我的理解是这样的。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com