委托和接口和委托有什么区别

3073人阅读
[C#](15)
&&&& C#中的委托类似于C或C++中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。& 委托是一种特殊的类型(class),用途是来实现对一种方法的封装,在某种事件发生时,自动调用该方法。好处显然易见,它使用户可以自定义自己的方法实现,通过封装,CLR会在相应事件激发时调用你定义的方法,实现你的功能。
  C#中的&事件&是当对象发生某些事情时,类向该类的客户提供通知的一种方法。事件最常见的用途是用于图形用户界面;通常,表示界面中的控件的类具有一些事件,当用户对控件进行某些操作(如单击某个按钮)时,将通知这些事件。
  使用委托来声明事件。委托对象封装一个方法,以便可以匿名调用该方法。事件是类允许客户为其提供方法(事件发生时应调用这些方法)的委托的一种方法。事件发生时,将调用其客户提供给它的委托。注明:委托是对方法的包装&&&&&& 在不确定要调用什么方法时候而又不能用抽象或者多态实现的时候用委托。&&&&&&&&&&&&比如一个button,当点击肯定要触发事件,做一些处理,如果你是这个控件的开发者,你怎么知道当点击是要处理什么?你这个button会被什么容器所包含?所以你必须公布一个event出去,用控件的人具体去实现其功能。&&参考:&&&&&&&&&1、如下情况宜使用委托:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&只调用单个方法时.&&&&&&&&&&&&&&&&&&&&&&&&&&&当一个类需要方法说明的多重执行时.&&&&&&&&&&&&&&&&&&&&&&&&&&&&期望使用静态方法执行规范时.&&&&&&&&&&&&&&&&&&&&&&&&&&&&期望得到一个类似事件的模式时.&&&&&&&&&&&&&&&&&&&&&&&&&&&&调用者无需知道无需获取定义方法的对象时&&&&&&&&&&&&&&&&&&&&&&&&&&&&只想给少数既定组件分发执行规范时.&&&&&&&&&&&&&&&&&&&&&&&&&&&&想要简单的组成结构时.&&&&&&&&&&&&&&&2、如下情况宜使用接口:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&当规范定义了一组需要调用的相关方法时.&&&&&&&&&&&&&&&&&&&&&&&&&&&&一个类仅代表性地执行一次规范时.&&&&&&&&&&&&&&&&&&&&&&&&&&&&接口的调用者想映射接口类型以获取其他类或接口时&&&&&&&&&&&3、对函数指针以.net的方式进行的封装,其实就是一个class。&&&&&&&&&&&&&&&&&&&&&&&&&应用最多的就是事件,在事件的情况下委托就变成了对回调函数指针的封装。&&&&&&&&&&&&&&&&&&&&&&&&&推荐:看看《.net框架程序设计》(李建忠译)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:50353次
排名:千里之外
原创:47篇
(1)(1)(6)(1)(6)(1)(11)(3)(4)(16)(1)求委托 与 接口的区别?_生活百科_百科问答
求委托 与 接口的区别?
提问者:申二眉
个人总结:首先,我认为最大的区别在于,我们可以在委托类的对象内,叠加或者删除多个方法;而接口一次只能加载一个方法;-------------------------------------------------------------------msdn观点:C# 编程指南何时使用委托而不使用接口(C# 编程指南) 委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现;可以为任何类中的方法创建委托,前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。既然存在这些相似性,那么类设计器何时应使用委托,何时又该使用接口呢?在以下情况中使用委托:
当使用事件设计模式时。-一种设计模式
当封装静态方法可取时。-隐藏静态方法;我举个例子:new delegate(静态方法)
当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。
需要方便的组合。
当类可能需要该方法的多个实现时。需要一个委托完成多个事情的时候。 在以下情况中使用接口:
当存在一组可能被调用的相关方法时。
当类只需要方法的单个实现时。
当使用接口的类想要将该接口强制转换为其他接口或类类型时。
当正在实现的方法链接到类的类型或标识时:例如比较方法。 ------------------------------------------------------------------其他观点:我们只讨论接口仅包含方法声明的情况,如果接口包含属性、索引器、事件等,与委托肯定不搭。一个仅包含多个方法声明的接口与多个委托要相互替换,在很多情况下都没有技术问题,只是怎样做更合理的问题。 相对于委托来说,接口可以声明多个方法,而且接口名称可以很好的表示这些方法的相关性;接口在同一时间只能引入一种实现,也就是说类Client中有接口IUser型的成员,UserA和UserB都实现了IUser,那么在Client中只能调用UserA或者UserB的方法,要想同时调用A和B的方法,需要创建两个IUser型成员。 相对于接口来说,委托类型只能&声明&一个方法;一个委托实例可以引入任意多个签名适合的方法,并且这些方法的顺序由委托实例所在类的外部决定,也就是说类A中有委托类型B的实例b(也可以是event),那么在Client1、Client2等多个类中都可以给A的实例a的成员b叠加方法,并且顺序由Client1、Clinet2决定。 从某种意义上可以这样理解:接口给一系列类定义了规范,是面向对象的,但同一时间只能代表其中一个类;委托给一系列方法定义了规范,同一时间可以代表这些方法的任意顺序组合。一个仅包含多个方法的接口,可以拆分成多个委托来代替,这样耦合度更低,但是失去了相关性,面向对象的特性也随之失去。一个类中的多个委托实例也可以改成一个接口来代替,但会失去委托可以叠加任意多方法的灵活性,并且如果多个委托是不相关的,会造成理解困难(接口名称就很难定)。 当接口只包含一个方法,委托只需叠加一个方法时,两者的作用是一样的。即使在这种场景下,我们也要明确,接口是针对类,委托是针对方法或某个地方发生了某件事,这样就自然会合理运用了。比如说FrameWork类库中,很多类实现了ICloneable接口,很多控件有OnClick事件。
另外,业务层需要调用表现层的方法时,往往通过提供事件和表现层交互,多线程时还要用Invoke方式调用这个事件。如果业务层提供一个接口让Form实现,总觉得怪怪的,但是微软MVP模式的一种实现方法就是这样的,在P中定义接口让V(WebForm)实现,除了代码重用度提高外,和通常的WebForm做法还是一样的,和MVC有本质区别。 -------------------------------------------------------------------接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。接口(interface)是向客户承诺类或结构体的行为方式的一种合同,当实现某个接口时,相当于告诉可能的客户:&我保证支持这个接口的方法,属性等&,接口不能实例化,接口只包含成员定义,不包含成员的实现,成员的实现需要在继承的类或者结构中实现。 C#中的委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为,委托方法的使用可以像其他任何方法一样具有参数和返回值。委托对象能被传递给调用该方法引用的代码而无须知道哪个方法将在编译时被调用。从定义上来看似乎委托和接口没什么相似之处,但从隔离变化这个角度来看他们倒是有些相似之处,所以这里我们把他们放到一起来比较一番。委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现;可以为任何类中的方法创建委托,前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。既然存在这些相似性,那么类设计器何时应使用委托,何时又该使用接口呢?在以下情况中使用委托:当使用事件设计模式时。委托是事件的基础,当需要某个事件触发外界响应时,使用委托事件比较合适。当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。需要方便的组合,使用委托可以利用+=,-=方便的组合方法。当类可能需要该方法的多个实现时,使用多播委托。(多个事件)在以下情况中使用接口:当存在一组可能被调用的相关方法时。当类只需要方法的单个实现时。当使用接口的类想要将该接口强制转换为其他接口或类类型时。当正在实现的方法链接到类的类型或标识时:例如比较方法。使用单一方法接口而不使用委托的一个很好的示例是 IComparable 或 IComparable。IComparable 声明 CompareTo 方法,该方法返回一个整数,以指定相同类型的两个对象之间的小于、等于或大于关系。IComparable 可用作排序算法的基础,虽然将委托比较方法用作排序算法的基础是有效的,但是并不理想。因为进行比较的能力属于类,而比较算法不会在运行时改变,所以单一方法接口是理想
回答者:孔玉萱
Mail: Copyright by ;All rights reserved.编程语言(3)
接口:I是约束类应该具备的功能集合,约束了类应该具备的功能,使类从千变万化的具体逻辑中解脱出来,
便于类的管理和扩展,同时又合理解决了类的单继承问题;
在以下情况中使用接口:
1:在无法使用继承的场合中;
2:完全抽象的场合;
3:多人协作的场合;以上等等;
委托:D是约束方法集合的一个类,可以便捷的使用委托对这个方法集合进行操作。
在以下情况中使用委托:
&多用于事件处理中;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:64次
排名:千里之外

我要回帖

更多关于 委托和接口的区别 的文章

 

随机推荐