请问C#中的委托是什么?如何使用?
今天学到委托这个部分,我看了一下百度资料,现在对委托的认识是:委托是一个类,定义了方法类型,将方法作为另一个方法的参数使用,以便后者可以调用不同的参数。还有委托的方法是依...
今天学到委托这个部分,我看了一下百度资料,现在对委托的认识是:委托是一个类,定义了方法类型,将方法作为另一个方法的参数使用,以便后者可以调用不同的参数。还有委托的方法是依次执行的,可以使用+=、-=增加和删除委托方法。我知道的只有这些,还有哪些啊?求大神赐教,或者我哪儿理解错了,请大神指点。在下感谢了。
展开
展开全部
委托的用法很多:一般是用于声明事件和回调的委托,还可以是用于代表方法标签的委托.
书本上的委托只是对委托的定义与具体怎样调用问题,没有涉及到委托的真正实用的地方。其实委托是与事件和回调
一起来使用的,你可以看一下C#异步调用,与多线程处理里等就可以看到委托的作用了。
下面是别人的理解我觉得还是比较好的:
1)有了委托你就可以把方法看作像常数一样,而委托就是该常数类型的变量.
从这个角度看来用于声明事件的委托就是声明这个事件触发以后所调用的方法的标签或者特征.只有符合该标签(参数个数和参数类型)的方法才可以做为该用于该事件的回调.
一个事件触发了,你可能需要用多个方法处理该事件或者说该事件调用了多个方法(每个事件的实例都有一个需要调用的方法列表,当事件触发它会逐个调用列表中的每个方法)
2)通过使用委托你可以实现对方法变化的封装.
打个比方:如果你骑自行车,你需要有骑自行车的方法DriveBike().如果你骑摩托车你需要有骑摩托车的方法.现在你有一个方法DriveMoto.现在你需要定义一个方法,实现你骑(自行车或者摩托车)到某地DriveTo(地点,骑的方式)
骑的方式这里其实就是委托.在使用的时候,如果你是骑自行车你就用DriveBike实例化委托的实例带入DriveTo方法,如果你骑摩托车你就用DriveMoto实例化"骑的方式"这个委托带入DriveTo方法.
书本上的委托只是对委托的定义与具体怎样调用问题,没有涉及到委托的真正实用的地方。其实委托是与事件和回调
一起来使用的,你可以看一下C#异步调用,与多线程处理里等就可以看到委托的作用了。
下面是别人的理解我觉得还是比较好的:
1)有了委托你就可以把方法看作像常数一样,而委托就是该常数类型的变量.
从这个角度看来用于声明事件的委托就是声明这个事件触发以后所调用的方法的标签或者特征.只有符合该标签(参数个数和参数类型)的方法才可以做为该用于该事件的回调.
一个事件触发了,你可能需要用多个方法处理该事件或者说该事件调用了多个方法(每个事件的实例都有一个需要调用的方法列表,当事件触发它会逐个调用列表中的每个方法)
2)通过使用委托你可以实现对方法变化的封装.
打个比方:如果你骑自行车,你需要有骑自行车的方法DriveBike().如果你骑摩托车你需要有骑摩托车的方法.现在你有一个方法DriveMoto.现在你需要定义一个方法,实现你骑(自行车或者摩托车)到某地DriveTo(地点,骑的方式)
骑的方式这里其实就是委托.在使用的时候,如果你是骑自行车你就用DriveBike实例化委托的实例带入DriveTo方法,如果你骑摩托车你就用DriveMoto实例化"骑的方式"这个委托带入DriveTo方法.
展开全部
直接看MSDN或网上搜的大部分说的都是比较生硬的术语,你可以通俗的理解为将一个方法作为参数传递给另一个方法!也可以理解为:现有N个参数和返回值都相同的方法,在使用的时候根据需要一个个调用太繁琐,干脆把这些方法的规律(方法参数和返回值)总结出来,定义成一个委托!然后把要执行的方法交给委托去执行!+=操作实际上就是委托链,委托一次代理了若干个方法,以后执行时,我们调用委托来执行,委托会把所代理的方法一个个再执行!
委托在.net1.0就有,到了2.0时出现了匿名方法,也就是说委托要执行某一个方法,而这个方法并没有事先定义,随用随定义,连名字都没取,所以叫匿名方法。例:委托实例=delegate(int x,int y){return x+y;}实际就指向一个未取名的方法,而这个方法接收两个int参数,返回和。
到了.net3以后又更进一步,匿名方法还可以简写成:委托实例=(x,y)=>x+y; 这就是传说中的Lambda表达式,其本质是匿名方法,匿名方法本质是委托!
先通俗理解后,再看文档,你会恍然大悟!委托、匿名方法、Lambda表达式的概念其实很重要,如果你不理解的话是没办法学习好LinQ的。
这是我的理解,更多实例,你再搜吧~
委托在.net1.0就有,到了2.0时出现了匿名方法,也就是说委托要执行某一个方法,而这个方法并没有事先定义,随用随定义,连名字都没取,所以叫匿名方法。例:委托实例=delegate(int x,int y){return x+y;}实际就指向一个未取名的方法,而这个方法接收两个int参数,返回和。
到了.net3以后又更进一步,匿名方法还可以简写成:委托实例=(x,y)=>x+y; 这就是传说中的Lambda表达式,其本质是匿名方法,匿名方法本质是委托!
先通俗理解后,再看文档,你会恍然大悟!委托、匿名方法、Lambda表达式的概念其实很重要,如果你不理解的话是没办法学习好LinQ的。
这是我的理解,更多实例,你再搜吧~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的理解基本没错.
一般来说, 我们调用方法来完成某些工作, 传入的参数都是数据类型的, 委托可以认为是一个特殊的方法, 参数不是数据类型, 而是方法名, 实现的功能类似C++中的函数指针.
你只要按书上的例子自己写一两个简单的委托来实现一小段功能就可以了, 这样可以对委托有一个大致的了解和知道怎么应用, 更深层的东西, 建议现在不要太过于深入了解, 等学习了后面的知识后, 再回头来看委托, 你的了解就自然会深入些.
同样一本编程教材, 在你能力的不同阶段去看它, 都会有不同的领悟, 学习总是循序渐进的, 不要急于一次把委托吃透, 这不现实.
一般来说, 我们调用方法来完成某些工作, 传入的参数都是数据类型的, 委托可以认为是一个特殊的方法, 参数不是数据类型, 而是方法名, 实现的功能类似C++中的函数指针.
你只要按书上的例子自己写一两个简单的委托来实现一小段功能就可以了, 这样可以对委托有一个大致的了解和知道怎么应用, 更深层的东西, 建议现在不要太过于深入了解, 等学习了后面的知识后, 再回头来看委托, 你的了解就自然会深入些.
同样一本编程教材, 在你能力的不同阶段去看它, 都会有不同的领悟, 学习总是循序渐进的, 不要急于一次把委托吃透, 这不现实.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
委托在C++里就是函数针指,定义了一个相同的函数入口,然后委托对函数抽象出来的结果
事件由委托来实现的
public delegate void EventHandle(object sender,eventArgs e);//定义委托
public event EventHandle MyDIYEvent;//定义事件
委托还有一个用法是异步
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
委托是对方法的抽象,用来实现方法调用的解耦。就来事件为例,事件发表者并不会知道那个方法实现了这个事件的相应。而委托用类做为自己的底层实现,维护着一个委托的堆栈。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询