代码之家  ›  专栏  ›  技术社区  ›  STW

C#泛型-通过使用泛型方法确定泛型类型

  •  0
  • STW  · 技术社区  · 16 年前

    Tasks Handlers . 任务将从系统的不同部分发送到处理程序,并最终返回一个值。

    我们已经有了一个松散类型的系统,它已经变成了一堆杂乱无章的东西(任务启动器通常来自本质上是插件的第三方组件这一事实大大加剧了这个问题)。

    喜欢 . 问题在于一些语法。

    以下是我得到的(为了清晰起见,扩展了通用名称):

    interface ITask<ReturnType> { }
    
    interface ITaskHandler<TaskType, TaskReturnType> where TaskType : ITask<TaskReturnType>
    {
        TaskReturnType PerformTask(TaskType task);
    }
    

    ITask 是泛型,并且声明的泛型参数 伊塔斯克 ITaskHandler<ITask> . 这意味着每个 TaskHandler 伊塔斯克

    声明任务处理程序的最大缺点是会导致一些相当丑陋的签名。。。

    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>();
        }
    }
    

    …如果是,我将如何声明 PerformTask 当类型包含在 具体任务 ?

    1 回复  |  直到 16 年前
        1
  •  0
  •   Andrew Hare    16 年前

    不幸的是,你不能做你想做的事情,不能保留静态类型检查。所有的泛型类型参数都必须进行delared,以便编译器能够静态地知道什么会发生。