有了這個抽象類:抽象和通用方法
abstract class OrderHandler<T> : Handler where T : class
{
protected readonly Dictionary<Type, Func<BaseOrder, T>> OrderDispatcher =
new Dictionary<Type, Func<BaseOrder, T>>
{
{ typeof(OrderA), order => HandleOrder((OrderA) order) },
{ typeof(OrderB), order => HandleOrder((OrderB) order) },
{ typeof(OrderC), order => HandleOrder((OrderC) order) },
{ typeof(OrderD), order => HandleOrder((OrderD) order) },
};
public abstract T HandleOrder(OrderA order);
public abstract T HandleOrder(OrderB order);
public abstract T HandleOrder(OrderC order);
public abstract T HandleOrder(OrderD order);
}
abstract class Handler
{
public abstract Start(string orderId);
}
而且我要做出有機會獲得dispacher字典具體處理程序類,但每一個覆蓋並實現自己的HandleOrder方法。
我似乎無法將該通用T
應用於dictonary的代表。
類型或命名空間名稱「T」找不到(是否缺少using指令或程序集引用?)
我在做什麼錯?
編輯
我想有多個類繼承等OrderHandler爲InsertOrderHandler,DeleteOrderHandler,UpdateOrderHandler等 有很多Order對象(A,B,C,...),他們都繼承BaseOrder。
我已經有一個方法返回一個BaseOrder對象,但我需要知道它是哪一個子類。
BaseOrder order = GetOrder(id);
所以要避免做
if (order is OrderA) else if (order is OrderB) ...
我創建了按類型委派HandleOrder方法。
基本上
class InsertOrderHandler : OrderHandler<InsertOrderResult>
{
public override Start(string orderId)
{
Order o = GetOrder(orderId);
InsertOrderResult i = OrderDispatcher[o.GetType()](orderId);
}
public override InsertOrderResult HandleOrder(OrderA order)
{ /* do something then insert order */ }
...
}
class UpdateOrderHandler : OrderHandler<UpdateOrderResult>
{
public override Start(string orderId)
{
Order o = GetOrder(orderId);
UpdateOrderResult u = OrderDispatcher[o.GetType()](orderId);
}
public override UpdateOrderResult HandleOrder(OrderA order)
{ /* do something then update order */ }
...
class DeleteOrderHandler : OrderHandler<DeleteOrderResult>
{
public override Start(string orderId)
{
Order o = GetOrder(orderId);
DeleteOrderResult d = OrderDispatcher[o.GetType()](orderId);
}
public override DeleteOrderResult HandleOrder(OrderA order)
{ /* do something then delete order */ }
...
}
我開始處理這樣
new InsertOrderHandler().Start("123");
的方法怎麼能'抽象'以及'靜態'? –
到目前爲止,以下沒有答案可以幫助你。如果你可以用更多的上下文說出你想要達到的目標,這將很容易提供幫助。我希望你閱讀[我的評論在這裏](http://stackoverflow.com/questions/23783768/abstract-and-generic-methods#comment36578004_23783787) –
編輯的問題...我認爲現在更清楚:) –