C# 什么是「;调度员“;设计模式?
“dispatcher”模式是什么?我将如何在代码中实现它 我有一个泛型对象的属性包,希望将检索委托给泛型方法 目前,我在包中寻找一个特定的钥匙。例如: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
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的对象来实现的