我倾向于严重依赖仿制药,但我担心我会误用它们。
例如,我有一个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)];
}
}
我正在讨论的替代方法只是让函数使用参数:void DetachComponent(Type componentType)
,但我不喜欢调用每个方法,如:entity.DetachComponent(typeof(ColorComponent));
这是滥用泛型吗?我通常对容器类执行此操作,因为使用类型作为键的键值对对我来说很有意义。
答案 0 :(得分:6)
我认为没有任何问题。
对于DetachComponent,使用泛型是不必要的 - 你不会将类型作为泛型参数传递而不是仅传递常规(Type componentType)
参数。
对于GetComponent,使用泛型允许您在编译时返回正确的类型,而不必调用调用代码。在这里,使用泛型是有道理的。
使用泛型
GetComponent
和DetachComponent
,我认为出于一致性的原因,将它用于两者都是有意义的(即,完全按照你的方式完成)。