C# 什么是「;调度员“;设计模式?

C# 什么是「;调度员“;设计模式?,c#,.net,design-patterns,generics,C#,.net,Design Patterns,Generics,“dispatcher”模式是什么?我将如何在代码中实现它 我有一个泛型对象的属性包,希望将检索委托给泛型方法 目前,我在包中寻找一个特定的钥匙。例如: private Dictionary<String, Object> Foo { get; set; } private const String WidgetKey = "WIDGETKEY"; public Widget? WidgetItem { get { return Foo.Contai

“dispatcher”模式是什么?我将如何在代码中实现它

我有一个泛型对象的属性包,希望将检索委托给泛型方法

目前,我在包中寻找一个特定的钥匙。例如:

private Dictionary<String, Object> Foo { get; set; }
private const String WidgetKey = "WIDGETKEY";

public Widget? WidgetItem
{
    get
    {
        return Foo.ContainsKey(WidgetKey) ? Foo[WidgetKey] as Widget: null;
    }
    set
    {
        if (Foo.ContainsKey(WidgetKey))
            Foo[WidgetKey] = value;
        else
            Foo.Add(WidgetKey, value);
    }
}
专用字典Foo{get;set;}
私有常量字符串WidgetKey=“WidgetKey”;
公共小部件?WidgetItem
{
得到
{
将Foo.ContainsKey(WidgetKey)?Foo[WidgetKey]作为小部件返回:null;
}
设置
{
if(Foo.ContainsKey(WidgetKey))
Foo[WidgetKey]=值;
其他的
Foo.Add(WidgetKey,value);
}
}
有人建议,对于“dispatcher”模式,这可能更通用,但我找不到一个好的描述或示例


我正在寻找一种更通用的方法来处理属性包存储/检索

我不确定我是否正确理解了你的问题,但是

我有一个泛型对象的属性包,希望将检索委托给泛型方法

。。。听起来你在找关于“双重派遣”的信息

假设你有三门课:

abstract class A {}
class B extends A {}
class C extends A {}
还有两种方法来处理类型B和C的对象:

void DoSomething(B obj) {}
void DoSomething(C obj) {}
问题是,当您只有一个静态类型a的变量时

A a = new B();
。。。您不能调用DoSomething(a),因为在编译时只有它的静态类型(a)是已知的,所以编译器无法决定是调用方法DoSomething(B obj)还是调用方法DoSomething(C obj)

这就是双重派遣的用武之地。有些语言支持它,其他的如C++,C语言和java不支持。但是您也可以用这些语言自己实现它。有关示例,请参见:

以及:


wikipedia的第一篇文章指出,“在C#中,无需使用访问者模式,就可以实现多个分派。这是通过简单地强制转换传递给dynamic的对象来实现的