我是否滥用C#泛型?

时间:2014-09-05 16:23:23

标签: c# generics dictionary key-value

我倾向于严重依赖仿制药,但我担心我会误用它们。

例如,我有一个Entity,其中包含Component的子类字典,组件的类型是键,组件是值。示例包括PositionComponentColorComponent等。

我有分离和获取组件的方法,定义如下:

class Entity
{
    Dictionary<Type, Component> components;

    //...

    void DetachComponent<T>() 
        where T : Component 
    {
        components.Remove(typeof(T));
    }

    T GetComponent<T>()
        where T : Component
    {
        return (T)components[typeof(T)];
    }
}

我正在讨论的替代方法只是让函数使用参数:void DetachComponent(Type componentType),但我不喜欢调用每个方法,如:entity.DetachComponent(typeof(ColorComponent));

这是滥用泛型吗?我通常对容器类执行此操作,因为使用类型作为键的键值对对我来说很有意义。

1 个答案:

答案 0 :(得分:6)

我认为没有任何问题。

对于DetachComponent,使用泛型是不必要的 - 你不会将类型作为泛型参数传递而不是仅传递常规(Type componentType)参数。

对于GetComponent,使用泛型允许您在编译时返回正确的类型,而不必调用调用代码。在这里,使用泛型是有道理的。

使用泛型

  • GetComponent
  • 有意义
  • 不会对DetachComponent
  • 造成伤害

我认为出于一致性的原因,将它用于两者都是有意义的(即,完全按照你的方式完成)。