gpt4 book ai didi

c# - 什么是单一和多重分派(dispatch)(与 .NET 相关)?

转载 作者:太空狗 更新时间:2023-10-29 20:02:23 24 4
gpt4 key购买 nike

它是否与重载相同,如果不是,您能否提供每个 C# 中的示例

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

问过类似问题here

编辑:使用 C# 4.0 中新的“dynamic”关键字……这会使语言“多分派(dispatch)”启用吗?

最佳答案

多重分派(dispatch)是重载的一种“形式”......

例如,C# 是单分派(dispatch),因为如果仅根据一个参数“this”指针计算出要调用的方法。当你有这样的事情时:

Base base= new Derived();
base.DoSomething();

即使您通过基指针调用方法 Derived.DoSomething 也会被调用。现在,如果我们有以下内容:

class Derived : Base
{
public override void Process(Stream stream);
public override void Process(FileStream stream);
public override void Process(MemoryStream stream);
}

我们这样做:

Stream stream= new MemoryStream(...);
Base b= new Derived();
b.Process(stream);

然后我们将调用 Derived 中的 Process(Stream) 方法,因为 C# 在对象指针 (b) 上执行一次分派(dispatch),然后使用编译时信息来决定调用哪个方法。即使 stream 是 MemoryStream,单个调度系统也会忽略它。

在多调度系统中,将查看对象指针(如在 C# 中),并将检查参数的运行时类型。在上面的示例中,因为 stream 实际上是一个 MemoryStream,系统将调用 Process(MemoryStream) 方法。

关于c# - 什么是单一和多重分派(dispatch)(与 .NET 相关)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/480443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com