【发布时间】:2014-10-30 15:52:47
【问题描述】:
我倾向于严重依赖泛型,但我担心我会误用它们。
例如,我有一个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));
这是对泛型的滥用吗?我通常对容器类这样做,因为使用类型作为键的键值对对我来说很有意义。
【问题讨论】:
-
这只会允许每种类型的单个组件,不是吗
-
@RowlandShaw 不太清楚你在问什么,我省略了添加组件的代码,因为它在方法中不使用泛型。
-
@Shane 他只是指出,如果您在每种类型的基础上注册/取消注册,那么您不能拥有相同类型的多个实例(否则调用 detach 会随机删除一个,因为您没有任何关于您要删除此类型的“哪个”的信息,因为您只传递了类型)。我很确定这对你来说没问题,但我认为这是他的问题
-
这看起来像一些单身商店...
-
@RonanThibaudau 这是有道理的。是的,每个实体中只有一种类型的组件。
标签: c# generics dictionary key-value