長篇小說:我正在研究一個系統,該系統將有Tasks
和Handlers
。任務將從系統的不同部分發送到處理程序,最終返回值。C#泛型 - 從使用泛型方法確定泛型
我們已經得到了一個鬆散類型的系統,並且變成了粗糙混亂的東西(問題由於任務發起者經常來自第三方組件基本上是插件)。
我一直在想辦法以強類型的方式實現它 - 可能只是將它帶到了模糊的地步 - 但我接近就像。問題是一些語法。
這裏是我有(爲清楚起見擴大通用名稱):
interface ITask<ReturnType> { }
interface ITaskHandler<TaskType, TaskReturnType> where TaskType : ITask<TaskReturnType>
{
TaskReturnType PerformTask(TaskType task);
}
正如你所看到的,ITask
是通用的,並且ITask
聲明泛型參數是返回類型爲ITaskHandler<ITask>
。這意味着每個TaskHandler
合同都會返回由其ITask
指定的類型。
最大的缺點是宣佈TaskHandlers導致了一些非常醜陋的簽名......
class SpecificTask : ITask<Dictionary<Type,Delegate>>
{
}
class SpecificHandler : ITaskHandler<SpecificTask, Dictionary<Type, Delegate>>
{
public Dictionary<Type, Delegate> PerformTask(SpecificTask task)
{
return new Dictionary<Type, Delegate>();
}
}
我的問題是:既然SpecificTask
已經提供了它的返回類型爲泛型參數,可以SpecificHandler
的簽名縮短至更多的東西一樣:
interface ITaskHandler<TaskType> where TaskType : ITask
{
// pulling TaskReturnType out of thin air...
TaskReturnType PerformTask(TaskType task);
}
class SpecificHandler : ITaskHandler<SpecificTask>
{
public Dictionary<Type, Delegate> PerformTask(SpecificTask task)
{
return new Dictionary<Type, Delegate>();
}
}
......如果是這樣,我怎麼會聲明在類型包含在SpecificTask
的PerformTask
返回類型?
害怕可能是這種情況...希望它可能只是一些我不知道的語法 – STW 2009-09-28 20:12:40