日期:2014-05-19  浏览次数:21057 次

我对接口与委托的理解!!!
大家好,最近学习C#,也看了些JAVA,感觉C#中的委托怎么和JAVA中的接口是那么的相似,请问前辈,在C#中委托与接口到底有什么区别?是不是委托就是接口?

------解决方案--------------------
委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现;可以为任何类中的方法创建委托,前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。既然存在这些相似性,那么类设计器何时应使用委托,何时又该使用接口呢?

在以下情况中使用委托:

当使用事件设计模式时。

当封装静态方法可取时。

当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。

需要方便的组合。

当类可能需要该方法的多个实现时。

在以下情况中使用接口:

当存在一组可能被调用的相关方法时。

当类只需要方法的单个实现时。

当使用接口的类想要将该接口强制转换为其他接口或类类型时。

当正在实现的方法链接到类的类型或标识时:例如比较方法。

使用单一方法接口而不使用委托的一个很好的示例是 IComparable 或 IComparable。IComparable 声明 CompareTo 方法,该方法返回一个整数,以指定相同类型的两个对象之间的小于、等于或大于关系。IComparable 可用作排序算法的基础,虽然将委托比较方法用作排序算法的基础是有效的,但是并不理想。因为进行比较的能力==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明: <我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q64180940(请清楚注明业务还是技术咨询)
==================================================================属于类,而比较算法不会在运行时改变,所以单一方法接口是理想的



------解决方案--------------------
个人感觉,接口和抽象类反而更接近,而委托不过是方法根据签名传来传去的一个结构体——呵呵~~
在我的想法里,更接近指针——不过这个可能是胡说八道,因为我对C的指针概念为零。

==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明: <我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q64180940(请清楚注明业务还是技术咨询)
==================================================================
------解决方案--------------------
委托就是函数指针...
举个例子
#include <stdio.h>
#include <stdlib.h>

void print(void);

int main(int argc, char *argv[])
{
void (*ptr)(void);
ptr = print;
ptr();
system( "PAUSE ");
return 0;
}
void print(void){
printf( "called\n ");
}
------解决方案--------------------
在.Net中,委托和接口是两个类型的东西,用法差异很大。建议先详细看看MSDN

==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明: <我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q64180940(请清楚注明业务还是技术咨询)
==================================================================
------解决方案--------------------

接口不等于委托,不仅如此,而且根本就是两个完全不同的概念.
虽然其定义相似,委托只定义方法签名,而接口也只能定义方法头,所以接口必须被继承,并定义其实现才能使用.而委托不用定义其方法体,只要实例化就可以直接使用.
个人理解:接口更相似于抽象类,必须被继承并实例化才能使用,本身不带方法的实现
委托更似于指向函数的指针,只要其方法签名相同,就可以指向任意的方法,而事先也不需要知道那个对象去执行.
up

------解决方案--------------------
不是这个概念,接口为了结构化更清晰些——用的地方不同,就无所谓哪一个更灵活了。

你比较白菜和斧子哪一个更实用——没有道理的。

==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明: <我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q64180940(请清楚注明业务还是技术咨询)
==================================================================
------解决方案--------------------
委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现;可以为任何类中的方法创建委托,前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。

接口不等于委托,不仅如此,而且根本就是两个完全不同的概念.
虽然其定义相似,委托只定义方法签名,而接口也只能定义方法头,所以接口必须被继承,并定义其实现才能使用.而委托不用定义其方法体,只要实例化就可以直接使用.