0

継承されたサブクラスで静的データ メンバーを強制することは可能ですか?

ここに私の問題/思考プロセスがあります:

他のすべてのオブジェクトが継承する「GameObject」基本クラスを作成して、ポリモーフィズムに役立てたいと考えています。

継承された各クラスには、ポリゴンをレンダリングするための頂点の静的データ メンバー リストが必要です。正確なプロセスは次のようになります。

  • 頂点の静的リストに基づいてオブジェクトを作成
  • テクスチャを適用する
  • インスタンス化されたオブジェクトの回転変数に基づいてオブジェクトを回転します
  • インスタンス化されたオブジェクトのワールド座標に基づいてオブジェクトを変換します

ゲームオブジェクトから継承するすべてのオブジェクトについて、静的な頂点リストがあることを保証したいと思います

リストがあるかどうかを気にする必要がありますか、それとも描画メソッド (インターフェイス iRender によって保証されます) があることだけを気にする必要がありますか?

4

3 に答える 3

1

すべての子孫と基本クラス自体の基本クラスで宣言された静的クラス メンバーの 1 つのインスタンスがあります。したがって、基本クラスの頂点の単一のリストでは不十分です。できること: - 基本クラスで宣言する

private static Dictionary<string, List<vertex>> PointsPerClass = 
    new Dictionary<string, List<vertex>>();

子孫が頂点を指定する方法については言及していませんが、すべての子孫によって上書きされた仮想基本クラス メソッドがあるとしましょう。

protected virtual FillStaticVertices(List<vertex> aVertices)
{
}

次に、基本クラスには public メソッドがあります。

public GameObject CreateObject()
{
    string key = GetType().FullName;
    List<vertex> points = null;
    if (PointsPerClass.ContainsKey(key))
      points = PointsPerClass[key];
    else {
      points = new List<vertex>();
      PointsPerClass.Add(key, points);
      FillStaticVertices(points);
    }

    // CreateObjectFromPoints is an abstract method implemented by descendants
    GameObject gameObj = CreateObjectFromPoints(points);
    // apply textures, rotations, etc

    return gameObj;
}
于 2012-11-12T17:14:34.607 に答える
1

継承によりprotected static List<Vertex>、基本クラスの a は自動的に派生クラスの一部になります。これは、各派生クラスが親クラスのリストとは別の独自のリストを持つ必要がない限り、機能するはずです。

于 2012-11-12T16:51:52.440 に答える
-1

GameObject がインターフェースの場合、 の存在を強制できますstatic Property

interface GameObject
{
     static List<vertex> vertices {get; set;}
     //other common code
};

または、頂点のリストを保護されたデータ メンバーとして保持しGameObject、派生クラスにアクセスさせることもできます。

于 2012-11-12T16:51:12.447 に答える