C#委托求解
委托接触很久了,也用了很多次了。但是一直无法理解到委托的好处。希望大家帮出出招.! --------------------编程问答-------------------- 没啥好处如果有易做图使用委托的时候 就知道他的好处了
理解为C指针
多线程开发中 子线程改变UI的地方 不委托不让改
比如:
public static List<XmlNode> Each(this XmlNodeList list, EachDelegate<XmlNode> fn)
{
return list.ToList().Each( delegate(XmlNode node, int index)
{
return fn( node, index );
} );
}
Delegate
--------------------编程问答-------------------- C#分值类型与引用类型,这不用解释这两者是什么吧
委托就是对函数的引用 --------------------编程问答-------------------- 请使用一次linq
看看linq 如何对list<T>使用where方法滴
你甚至可以自己模仿一个linq的方法
list<T> where(this list<T> list,func(T,bool) fun)
{
foreach(T item in list)
if(fun(item))
yield return item;
}
ok,你觉着linq在这里使用func(T,bool)对你来说有好处没,好处是啥!!! --------------------编程问答-------------------- 委托就是对函数的引用 --------------------编程问答-------------------- 允许将原来由函数内处理的行为提升到调用者处理。
比如说,一个查找文件的操作,我们用一个函数来封装。但是找到以后做什么,由主程序决定。
我们就让主程序调用这个查找文件的函数,同时传递一个委托,当文件找到以后,我们把文件送入打印机打印。
如果我们希望重用这个查找的过程,但是这次我们需要将找到的文件备份到FTP服务器,那么这个函数不用动,我们只要传递给他另一个复制文件到服务器的委托就可以了。
函数使得我们可以把主程序要做的事情推到函数里面做,更改函数,主程序不变,函数是一个黑盒。
委托使得我们把函数体内做的事情提到主程序去做,更改主程序,函数不变。 --------------------编程问答-------------------- 我设计一个类
这个类里面有个方法大概是这样子的
void DoSomething()
{
但到底Do什么好呢,我也不知道...留给外面的人去实现把
}
于是 我定义了一个函数签名类型也就是委托,再声明一个事件.......这就是作用把
就如我们在网页上拖一个Button,注册了Click事件
对Button来说,他是有Click函数的,但这个函数暂时没有干什么,
让外面的我们来实现,
于是我们在相同函数签名说明Click要干什么
然后注册到Button的Click事件中去
于是点了网页上按钮后,Button就调用我们写的函数!!!!
--------------------编程问答-------------------- 就是我自己做不了的事情,让其他人来做。
比如我帮你写作文,但是主题我不知道,你要告诉我主题
Write(delegate subject)
{
subject(); //获得主题
write(); //写文章
}
这个subject是你去实现的,你传递给我,实际就是函数指针的一个包装。
委托使用在回调,事件等方面。
http://blog.csdn.net/cc_net/archive/2008/05/21/2467717.aspx --------------------编程问答-------------------- 如果你能理解javascript里面的函数是一个对象的话,我相信委托就不能理解了
function a(b)--------------------编程问答-------------------- 委托就是对函数的引用 我本人认为孰能生巧,什么事都是一个熟与不熟啊,所以你自己多找些这些东西练练啊,好好加油啊。。。。 --------------------编程问答-------------------- 就是函数指针。。 --------------------编程问答-------------------- 委托其实就是用来解决函数引用的问题,就是可以通过一个变量来代表某类函数,这类函数函数签名必须一致。由于它是一个变量,所以可以当成其他函数的参数来使用,即可以用来实现函数回调功能。
{
b();
}
function b()
{
alert("this is b");
}
声明一个委托其实在后台CLR是把它当成一个类来处理。这点你可以通过ildasm工具来查看...
(委托也有委托的缺点,所以后面又使用了事件,同样也可以通过ildasm来查看CIL) --------------------编程问答-------------------- 有了委托,我们可以更好的进行封装。比如:Button,我们不需要知道底层的消息是如果发送,获取的,只需要传递一个函数指针,专注于做哪些操作。使得我们我可更加专注于业务逻辑的处理。同时,委托又是类型安全的。(个人愚见) --------------------编程问答-------------------- 首先委托是类型安全的
类似C中的指针 --------------------编程问答-------------------- 看这两篇文章
http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html
http://www.cnblogs.com/JimmyZhang/archive/2008/08/22/1274342.html
应该会对你有所帮助
补充:.NET技术 , .NET Framework