public T GetComponent<T>() where T : Component<T>
{
return (T) components[T.GetMask()];
}
在组件&lt; T> GetMask()以静态方式删除。那么为什么我不能执行这个方法,编译器甚至没有看到任何方法,如果我使用限制,在编译时保证除了Component&lt; T>和继承的类型不会用作T?
我知道如何通过实例化T类型对象来实现它,但是这个实现不适合我的任务。
为了使问题有另一种答案,我需要得到基类Component&lt;的组件。 T>来自用户继承的实体,来自所有组件的实体存储在Dictionary&lt; TypeMask,ComponentBase&gt;。 组分LT; T>继承自ComponentBase。要从实体获取组件,可以使用GetComponent()方法。如果不使用泛型方法,用户将编写与下面第4行所写的相同的内容。所以,也许有其他方法来获取组件,但我没有看到它。
Position pos = entity.GetComponent(Position.Mask); //I need that
Position pos = entity.GetComponent<Position>(); //or that
Position pos = (Position)entity.GetComponent(Position.Mask); //but not that
我很抱歉语法错误。
答案 0 :(得分:2)
您可以通过Component而不是T
访问静态方法public T GetComponent<T>() where T : Component<T> {
return (T) components[Component<T>.GetMask()];
}