我所理解的委托
一:为什么会有委托?为什么语法是这样?
在c,c++中,可以使用函数指针作为参数来实现C#中委托的功能,而实际上,应该这么说:c#中委托其实跟C,C++的实现方式一样,只不过委托是一个安全指针,而且更加优雅更加OOP。但为什么用delegate就更oop了呢?为什么不直接将一个函数(或者叫方法)名称当做参数传递到另一个函数(或者叫方法)内部呢?而且javascript中就是这样做的。例如开始一个线程可以这样写:
Thread.Start(EntryPoint);
这样多么方便啊?何必还用代理这么麻烦?
来看《c#》高级编程中的解释:
“实际上,这是一种很简单的方式,在一些语言如C,C++中使用的就是这种方式(在C和C++中参数EntryPoint是一个函数指针)。但这种直接的方法会导致一些问题,例如类型的安全性,而且在进行面向对象编程时,方法很少是孤立存在的,在调用前,通常需要与类实例相关联。而这种方法并没有考虑到这个问题。所以在.NET Framework在语法上不允许使用这种直接的方法。如果要传递方法,就必须把方法的细节包装在一种新类型的对象中,那就是委托。委托只是一种特殊的对象类型,起特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是方法的细节”