我目前正在基于 Unity 的装饰器模型构建自己的游戏引擎。我有三个类(SceneStateManager(一次只控制一个场景)> Scene > SceneLayer > GameObject > Component),它们构成了场景层次结构,除了名称和一些更小、非常具体的功能外,它们基本相同。(在这种情况下,覆盖方法会这样做)
所有类都可以从父层次级别类类型初始化,并控制多个子类。由于这些类有很多共同的功能,我想让它们派生自一个基类,该基类对共享功能进行分组以简化代码。
“超级基类”(ListJob<T>)
是一个控制子类的类,直到现在,所有前面提到的类型都派生自它以至少简化那部分。因此,子处理本身不需要包含在此处的代码中,因为它已经很好地工作了。
我现在需要为将来派生的所有场景层次结构类的基类获取适当的通用签名。我当前的解决方案无法编译并出现此错误: http: //msdn.microsoft.com/en-us/library/bb384252 (v=vs.100).aspx
我当前版本的通用签名和 SceneSystemJob 类:
public abstract class SceneSystemJob<TItem, TParent> : ListJob<TItem>, IInitializable<TParent>
where TItem : IInitializable<SceneSystemJob<TItem, TParent>>
{
private TParent _Parent = default(TParent);
public TParent Parent
{
get
{
return _Parent;
}
protected set
{
_Parent = value;
}
}
// Implementation
public void Initialize(TParent parent)
{
this.Parent = parent;
}
}
场景状态管理器:
public class SceneStateManager // Controls only one Child and does not derive from super base class
场景:
public class Scene : SceneSystemJob<SceneLayer, SceneStateManager>
场景层:
public class SceneLayer : SceneSystemJob<GameObject, Scene>
游戏对象:
public class GameObject: SceneSystemJob<Component, SceneLayer>
零件:
public abstract class Component : Manager, IInitializable<GameObject>
接口 IInitializable:
public interface IInitializable<TParent>
{
void Initialize(TParent parent);
}
如果您仍然需要更多代码,请告诉我。