C#中接口和委托分别有什么作用呀

风吹蛋蛋飘~ 2016-06-06 10:22:38
能解释下麽
...全文
631 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
接口是在类级别定义规范约束,委托则只是方法级别
  • 打赏
  • 举报
回复
比如说我们说代码
public class UPQ
{
    public int abc(string x)
    {
        .....
    }
.....
我们说 UPQ 对象的接口表明它有一个 abc 操作,可以..........这是针对于靠谱的功能方法、从接口角度来说的。 但是假设我们说 UPQ 对象有一个“委托数据”,可以读也可以写,那么这就是数据角度来说的,而不是针对于 UPQ 本身给我们提供什么靠谱的规范,实际上只针对于说 UPQ 给我们提供了一个动态数据属性。这个数据的值是一个委托,因此我们可以间接地执行委托、也可以不执行这个委托。
  • 打赏
  • 举报
回复
这个美人鱼还可以帮你捕鱼。但是它毕竟是你捕上来的猎物之一,而不是基本的捕鱼工具。
  • 打赏
  • 举报
回复
方法、属性、事件,都可以作为接口的组成部分,声明在一个接口上。而委托回调,是一个数据类型。它可以用来声明上述任何一个东西的参数或者返回值,总之是数据部分。 这基本上相当于“捕鱼工具”跟“鱼”的区别。只不过这里的“鱼”,包括一个“美人鱼”可以给你做饭、上淘宝、暖被窝,比一般的鱼要更大、更复杂、负担更重、可玩性更高。 委托回调是一种数据类型,它用来封装一个方法调用,把方法作为数据而进行传递。但是它实际上也就跟int、string、DateTime,以及其他你自定义的类型类似地,都是普通类型。不同点就是它封装的是一个方法的一系列动态 Invoke 规则,并且它无法序列化、无法跨进程。
gw6328 2016-06-06
  • 打赏
  • 举报
回复
接口是一个规则,一个约定。 委托是一个指向方法的引用。
我不懂电脑 2016-06-06
  • 打赏
  • 举报
回复
接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。接口(interface)是向客户承诺类或结构体的行为方式的一种合同,当实现某个接口时,相当于告诉可能的客户:“我保证支持这个接口的方法,属性等”,接口不能实例化,接口只包含成员定义,不包含成员的实现,成员的实现需要在继承的类或者结构中实现。 C#中的委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为,委托方法的使用可以像其他任何方法一样具有参数和返回值。委托对象能被传递给调用该方法引用的代码而无须知道哪个方法将在编译时被调用。 从定义上来看似乎委托和接口没什么相似之处,但从隔离变化这个角度来看他们倒是有些相似之处,所以这里我们把他们放到一起来比较一番。 委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现;可以为任何类中的方法创建委托,前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。
crystal_lz 2016-06-06
  • 打赏
  • 举报
回复
委托 你就当作是一个 变量 只不过这个变量不是 int 不是 string 而是一个函数的变量
比如
void TEST(string) foo = new void TEST(string)();
foo("this is a test");
foo 就是一个 函数的变量 只是实际中不是我上面那样写的 而是

public delegate void TEST(string strText);

private void Function(string strText) {
Console.WriteLine(strText);
}
//=====
TEST t = new TEST(Function);
t("this is a test");
//此时 t 就是 void Function(string strText) 的一个变量
而 public delegate {void TEST(string strText)}
则表示 TEST 是一个委托 他可以表示任何一个 void 返回类型 参数是 只有一个string 的函数
只要符合上面条件的函数 都可以用 TEST 来表示

有很多代码中需要用到这样 用函数作为参数的地方 如果控件的事件通知 比如button 的click


而接口 则定义一个规范约束
比如说 我定义一个usb接口 而且描述这个接口是方形的而不是圆的 那么要使用我这个接口的东西 你就必须给我做成方形的接口 不管你是U盘还是鼠标 反正你只要按照我的标准实现了一个方形的接口就行了
比如程序中 我要定义插件功能 那么就可以写一个插件的接口 写插件的人继承接口 而程序只是去负责调用接口 而不管具体实现的是什么代码

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧