7 Stimmen

Objekt einer Klasse in sich selbst

Hey ich denke, wenn ich Instanz einer Klasse mit in sich selbst machen könnte...

Mein Problem ist, dass ich 3D-Sphären für Planeten und ihre Monde erstelle, deren Daten ich in Object behalte. Ich übergebe Parameter an den Konstruktor meiner Planetenklasse für "Size" "Orbital Radius" "Texture" "Revolution Speed" etcetra. Ich muss eine weitere Klasse für die Monde der Planeten erstellen, die ein exaktes Duplikat der Mondklasse ist.

Ich dachte, wenn ich die Klasse Objekt in sich selbst machen könnte. Übergeben Sie einen Parameter für die Liste \array von Objekten von sich selbst zu erstellen und wie für die Erde werde ich "1" übergeben, um einen Mond zu erstellen und da der Mond den gleichen Konstruktor haben wird, werde ich "0" für keine Monde des Mondes übergeben. zu erstellen.

Etwa so

class Planet
{
    Model     u_sphere;
    Texture2D u_texture;
    //Other data members

    List<Planet> Moons = new List<Planet>(); 

    Planet()
    {
    //Default Constructor
    }

    //Overloaded\Custom Constructor
    Planet(Model m, Texture2D t, int moon_count)
    {
       u_sphere  = m;
       u_texture = t;

       while(moon_count > 0)
       {
           Model     moon_sphere = LoadMesh("moon.x");
           Texture2D u_texture   = LoadTexture("moon.bmp"); 
           Planet    temp        = new Planet(moon_sphere,moon_texture,0);
           Moons.Add(temp);
           moon_count--;
       }
    }
    //Others Getters & Setters
}
  • Ist das irgendwie möglich?

  • oder Was ist die beste Praxis \approach für diese Art von Problem?

p.s Ich verwende C# und Microsoft X.N.A Framework

0voto

Buh Buh Punkte 7281

Während Ihr Code in Ordnung ist, sieht es nur so aus, als ob er für meinen Geschmack ein bisschen zu nah an einer Infantilitätsschleife ist. Wenn du jemals die 0 in eine 1 geändert hast, dann BANG! Eine Möglichkeit, dies robuster zu gestalten, wäre, einen zusätzlichen Konstruktor zu erstellen und diese zu verketten. Auf diese Weise gibt es keine Rekursion.

Planet(Model m, Texture2D t, int moon_count) : this(m, t)
{
    while(moon_count > 0)
    {
        Model     moon_sphere = LoadMesh("moon.x");
        Texture2D u_texture   = LoadTexture("moon.bmp");
        Planet    temp        = new Planet(moon_sphere, moon_texture);
        Moons.Add(temp);
        moon_count--;
    }
}

Planet(Model m, Texture2D t)
{
    u_sphere  = m;
    u_texture = t;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X