我是不是滥用了C#泛型

本文关键字:泛型 是不是 | 更新日期: 2023-09-27 18:20:44

我倾向于严重依赖泛型,但我担心我会滥用它们。

例如,我有一个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));

这是滥用仿制药吗?我通常对容器类这样做,因为键值对使用类型作为键对我来说是有意义的

我看不出有什么问题。

对于DetachComponent来说,使用泛型是完全不必要的——将类型作为泛型参数传递,而不仅仅是传递常规的(Type componentType)参数,不会带来任何好处。

对于GetComponent,使用泛型可以在编译时返回正确的类型,而调用代码不必强制转换。在这里,使用泛型是有意义的。

由于使用了泛型

  • GetComponent
  • 对CCD_ 9无损伤

我认为,出于一致性的原因,两者都使用它是有意义的(即,做你已经做过的事情)。

我是不是滥用了C#泛型