微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 什么是 – 单个和多个调度(与.NET相关)?

它是否与重载相同,如果没有,你可以在C#中提供每个例子吗?

我已经阅读了对SO中提出的类似问题的回复…我不明白发布给它的回复.

类似的问题问here

编辑:使用C#4.0中新的“动态”关键字…这会使语言“多调度”启用吗?

解决方法

C#使用单一调度,其中包括重载方法.当你有代码
stringBuilder.Append(parameter);

调度程序查看stringBuilder类上定义的所有方法,并找到正确的方法.

对于多个调度示例,让我们看一下Prolog(这是我能想到的第一个).你可以在prolog中定义一个函数

func(Arg1,Arg2) :- ....body....

这不是在任何类中定义,而是在全局范围内定义.然后,您可以在任何两个参数上调用func(Arg1,Arg2),并调用函数.如果你想要重载之类的东西,你必须验证函数内部的参数类型,并多次定义它:

func(Arg1,Arg2) :- is_number(Arg1),is_string(Arg2),....body....
func(Arg1,Arg2) :- is_string(Arg1),is_list(Arg2),....body....

然后,您将发送的任何两个参数类型都将被检查 – 这是多个调度部分.

简而言之,单个调度只查看第一个参数(在我们的第一个示例中为stringBuilder)定义的方法,然后解析使用其他参数调用的正确重载.多个调度具有在全局范围中定义的方法/函数,并在重载解析期间将所有参数视为相同.

我希望自己明确表示,这是一个非常艰难的主题.

更新:我忘了提及,多个调度在运行时发生,而单个调度在编译时发生.更新#2:显然,这不是真的.

原文地址:https://www.jb51.cc/csharp/100863.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐