我是否滥用C#泛型?

Sha*_*ane 4 c# generics dictionary key-value

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

例如,我有一个Entity包含子类字典的子类Component,组件的类型是键,组件是值.例子可以是一个PositionComponent,ColorComponent等等.

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

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)];
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Hei*_*nzi 6

我没有看到它有什么问题.

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

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

自从使用泛型

  • GetComponent和有意义
  • 不会伤害DetachComponent,

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