读书人

小弟我对接口与委托的理解!

发布时间: 2012-02-14 19:19:19 作者: rapoo

我对接口与委托的理解!!!
大家好,最近学习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(请清楚注明业务还是技术咨询)
==================================================================
[解决办法]
委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现;可以为任何类中的方法创建委托,前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。

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


个人理解:接口更相似于抽象类,必须被继承并实例化才能使用,本身不带方法的实现
委托更似于指向函数的指针,只要其方法签名相同,就可以指向任意的方法,而事先也不需要知道那个对象去执行
[解决办法]
不是一个概念。接口和抽象类类似但两个是有区别的。委托是一种操作方法,基本上就是回调函数的概念。某些类在设计是声明了n个执行地址变量,比如:A,B,C;A是当发生mousedown事件时,当前执行指针会跳转到A所描述的执行代码地址上执行,执行完后返回。所以当mousedown事件发生时,你希望执行你的一段代码,你只要告诉系统,A的执行地址是***,这个过程委托榜定事件的内容。
个人愚见,欢迎拍砖
[解决办法]
抽像类离程序员比较近。ms在2005变了c#这种语言的思想。这些概念的东东看一下哪个.net程序设计模范,一目了然。

读书人网 >C#

热点推荐