現在、Unity のデコレータ モデルに基づいて独自のゲーム エンジンを構築しています。シーン階層を構成する 3 つのクラス (SceneStateManager (一度に 1 つのシーンのみを制御) > 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;
}
}
SceneStateManager:
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>
インターフェイス II初期化可能:
public interface IInitializable<TParent>
{
void Initialize(TParent parent);
}
さらにコードが必要な場合は、教えてください。