栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用C#双重调度?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用C#双重调度?

访客模式是一种以面向对象的方式进行两次调度的方法。

当您要在运行时而不是编译时根据类型选择给定参数使用哪种方法时,此功能很有用。

双重调度是 多重调度 的特例。

当您在对象上调用虚拟方法时,这被视为单调度,因为调用哪个实际方法取决于单个对象的类型。

对于双重分派,将同时考虑对象的类型和方法sole参数的类型。这类似于方法重载解析,只是参数类型是在运行时以双调度方式而不是在编译时静态确定的。

在多调度中,一个方法可以有多个参数传递给它,根据每个参数的类型使用哪种实现。评估类型的顺序取决于语言。在LISP中,它从头到尾检查每种类型。

具有多个分派的语言使用泛型函数,这些泛型函数只是函数代用,与使用类型参数的泛型方法不同。

要在C#中进行两次调度 ,可以声明一个带有唯一对象参数的方法,然后声明具有特定类型的特定方法:

using System.Linq;class DoubleDispatch{     public T Foo<T>(object arg)    {         var method = from m in GetType().GetMethods()        where    m.Name == "Foo"    && m.GetParameters().Length==1   && arg.GetType().IsAssignableFrom          (m.GetParameters()[0].GetType())   && m.ReturnType == typeof(T)        select m;        return (T) method.Single().Invoke(this,new object[]{arg});   }    public int Foo(int arg) {  }    static void Test()     {         object x = 5;        Foo<int>(x); //should call Foo(int) via Foo<T>(object).    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442703.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号