长篇小说:我正在研究一个系统,该系统将有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