什么是“调度程序”模式以及如何在代码中实现它?
我有一个通用对象的属性包,并希望将检索委托给泛型方法。
目前,我有物业在包中寻找特定的钥匙。例如:
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);
}
}
有人认为这对于“调度员”模式可能更通用,但我一直无法找到好的描述或示例。
我正在寻找一种更通用的方法来处理属性包存储/检索。
答案 0 :(得分:9)
我不确定我是否理解你的问题,但是......
我有一个通用对象的属性包,并希望将检索委托给泛型方法。
...听起来你正在寻找有关“双重调度”的信息?
想象一下,你有三个班级:
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)。 / p>
这是双重调度的地方。有些语言支持开箱即用,其他语言如C ++,C#和Java则不支持。但您也可以使用这些语言自己实现它。有关示例,请参阅:
http://en.wikipedia.org/wiki/Double_dispatch
和