首页 / 知识
关于c#:委托不只是速记界面吗?
2023-04-17 08:28:00

Are delegates not just shorthand interfaces?假设我们有:
现在,我们可以将Bar和Baz折腾为Foos,并将其称为Func方法。 代表们简化了一点:
现在,我们可以作为Foo代表在Bar和Baz周围折腾。 除了获得较短的代码外,委托的真正好处是什么? 有一点细微的差别,委托可以访问定义了它们的类的成员变量。在C#中(不同于Java),所有内部类都被认为是静态的。因此,如果您使用接口来管理回调,例如按钮的ActionListener。实现的内部类需要(通过构造函数)传递对包含类的部分的引用,该类在回调期间可能需要与之交互。代表没有此限制,因此减少了实现回调所需的代码量。 较短,更简洁的代码也是值得的。 从软件工程的角度来看,您是对的,代表与函数接口非常相似,因为它们为函数接口提供了原型。 它们也可以以相同的方式使用:与传递包含所需方法的整个类(而不是传递整个类)相比,您可以仅传递一个委托。这样可以节省大量代码,并创建更具可读性的代码。 而且,随着lambda表达式的出现,现在也可以轻松地对其进行快速定义,这是一个巨大的好处。尽管可以使用C#动态地构建类,但实际上这是一个巨大的难题。 将两者进行比较是一个有趣的概念。从用例和代码结构的角度来看,我以前从未考虑过这些想法有多相似。 从调用者的角度来看,委托与具有单个方法的接口引用确实有很多共同点。 在第一个示例中,Baz和Bar是类,可以继承和实例化。在第二个示例中,Baz和Bar是方法。
您不能将接口引用仅应用于与接口协定匹配的任何类。该类必须显式声明它支持该接口。
您不能在接口协定中包含静态方法。 (尽管您可以将静态方法与扩展方法结合使用)。 可以将委托视为方法的接口,该接口定义方法必须具有什么样的参数和返回类型才能适合委托 您可以将委托作为函数中的参数传递(在技术上,委托在编译时可以成为对象,但这不是重点)。您可以(显然)将一个对象作为参数传递,但是随后您将该类型的对象与该函数绑定为参数。使用委托,您可以传递任何函数以在具有相同签名的代码中执行,而不管其来自何处。 不,委托用于方法指针。然后,可以确保与委托关联的方法的签名正确。 另外,您也无需知道类的结构。这样,您可以使用已编写的方法传递给另一个类中的方法,并定义要实现的功能。 使用Find方法查看List <>类。现在,您需要定义什么来确定某项是否匹配,而无需该类中包含的项实现IListFindable或类似项。 在至少一个向Java中添加闭包(即匿名委托)的建议中,它们等效于具有单个成员方法的接口。 接口和委托是完全不同的两件事,尽管我理解为了易于理解而用类似接口的术语描述委托的诱惑……但是,不了解真相可能会导致混乱。 代表们受到了启发(部分)是由于C ++方法指针的黑色艺术不足以实现某些目的。 一个经典的示例是实现消息传递或事件处理机制。 委托使您可以定义方法签名,而无需了解类的类型或接口-我可以定义一个" void eventHandler(Event * e)"委托,并在实现它的任何类上调用它。 有关此经典问题的一些见解以及为什么希望代表参加,请先阅读此内容,然后再阅读此内容。 是的,可以将委托视为一种方法的接口。 委托是类型化方法指针。与接口相比,它具有更大的灵活性,因为您可以利用协方差和协方差,并且可以修改对象状态(必须将this指针与基于接口的函子一起传递)。 另外,代表有很多不错的语法糖,使您可以轻松地将它们组合在一起。 |
最新内容
相关内容
linux转图像界面命令?
linux转图像界面命令?,系统,密码,电脑,工具,地方,界面,图形界面,软件,终端,命令,linux怎么从文字界面回图形界面首先我们打开Linux系统电脑,进linux界面网络命令?
linux界面网络命令?,网络,工作,地址,系统,信息,命令,目录,管理,标准,状态,使用linux下提供的字符界面来设置网络命令为1、直接修改网络配置文linux命令行界面向上?
linux命令行界面向上?,系统,标准,工作,地址,环境,命令,管理,服务,较大,位置,linux命令有哪些特点linux命令行的特点?1、Linux支持多用户,各个用linux炫酷命令界面?
linux炫酷命令界面?,系统,环境,项目,在线,网络,基础知识,网上,网站,近几年,管理系统,linux怎么进入字符命令界面?打开linux系统,在linux的桌面linux命令界面输入法?
linux命令界面输入法?,系统,工具,信息,第三,软件,输入法,名字,盘后,语言,区域,linux怎么切换输入法1、在运用程序中,您需要找到“系统工具”并linux转为命令界面?
linux转为命令界面?,系统,密码,电脑,软件,界面,图形界面,控制台,终端,命令,模式,linux系统怎么从图形界面进入命令界面?1、Linux命令行模式切linux命令行界面汉化?
linux命令行界面汉化?,系统,标准,软件,网上,管理,工具,电脑,底部,服务,项目,xshell命令行界面怎么显示中文?1、解决方法其实很简单的,即把xshellinux界面输入命令?
linux界面输入命令?,工作,系统,信息,地址,平台,软件,位置,环境,盘中,设计,linux下如何查看软连接?1、,软链接可以理解成快捷方式,也清楚知道原文linux命令行界面翻页?
linux命令行界面翻页?,工具,系统,命令,占比,技术,进程,空格键,模式,文件,字符串,LINUX系统中的TOP命令看进程,怎么翻页看下一页??1、W: 将当前linux命令界面切换?
linux命令界面切换?,密码,系统,终端,信息,状态,环境,地方,电脑,工具,命令,linux切换用户命令1、linux切换用户的命令是“su”。普通用户之间切linux命令行交互界面?
linux命令行交互界面?,系统,密码,状态,终端,信息,工具,环境,情况,首页,界面,linux怎么进入字符命令界面?1、打开linux系统,在linux的桌面的空白linux命令行界面密码?
linux命令行界面密码?,密码,系统,管理,状态,代码,软件,地址,信息,标的,用户,在linux下如何查看用户密码?方法/步骤首先,打开linux客户端。接着,