c#难理解概念之一-----委托

来源:百度文库 编辑:神马文学网 时间:2024/04/30 15:11:46
c#难理解概念之一-----委托
不管是对于初学者,或者是对使用过C#一段时间的人,都很难说清楚什么是C#. 我们先来看一下MSDN上对委托的定义:委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。“委托是一种引用方法的类型”这句话想必大家看完后和我一样一头雾水,不知道在说什么。其问题的根源在于在定义中,引入了两个模糊的概念“引用方法”和“类型”。估计没人能说清楚什么是“引用方法”什么是“类型”。用两个模糊的概念来解释什么是“委托”当然也就解释不清楚。那好MSDN既然解释不了,那我们可以到网络上去找找(我想这是大多程序员的第一反映),但最后都会发现,网络上对“委托”解释大都会列长长一段代码,然后告诉你这就是委托。估计大家看完后把代码都忘了,最后还是不明白什么是“委托”.这些文章往往没有解释或解释不清楚上面是“委托”,而只是告诉你什么东西是委托,只告诉你事物表面的东西,而不告诉你“委托”的本质是什么。到最后读者对“委托”还是搞不清楚。
为什么大家对“委托”感觉到很难理解,我想主要有两点原因第1.一些教材和资料对委托的概念没有解释清楚。第2是读者一般都有个先入为主的观念:c#是一种面向对象的语言,c#一切皆对象。因此潜意识的想用面向对象来解释“委托”。但发现不论怎么解释都解释不了,也就越来越糊涂了,到最后不了了之。既然这样我们何不抛开面向对象,一步步的来看看什么是委托。首先对于委托我就看到的最多的一个概念是什么?没错是“方法” 。方法:是一个带名称的、独立的、以可重用的方式放置的代码片段。方法无需应用程序其他部分的干预便能运行,如果创建的正确,则能够执行其名称指示的特定任务。可以看出 “方法”是“委托”中的一个比较重要的概念。那接下来我们思考“方法”和委托“之间”是什么关系?现在让我们看个使用委托的例子:public delegate int delegateMethod(int x, int y); 在这里的delegateMethod是什么?delegateMethod:是一系列方法的代表。为了更好理解这个问题,我们来看看我们非常属性的“类” :public class myClass{}这里的myClass是什么我想大家都很清楚:类,是从一组有共同特性的对象抽象出来的概念,它描述了对象的本质特征。我们可以用同样的方法来思考delegateMethod,delegateMethod是什么呢:delegateMethod 是从一组有共同特性的方法抽象出来的概念,它描述了方法的本质特征。现在我们就比较清楚了,类是一组对象的抽象,那委托不就是一组方法的抽象。
这样就总结出一句话:委托是方法的抽象,它代表了一组方法的共同特征