Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[.NET] Klasse, die sich in Liste anderer Klasse einträgt
PacMani
Unregistered

 
Beitrag #1
[.NET] Klasse, die sich in Liste anderer Klasse einträgt
Hallihallo,

irgendwie stehe ich momentan auf dem Schlauch. Ich weiß nicht, wie ich elegant die folgende Idee umsetzen kann:

Ich bastele gerade an einer Direct3D-Engine rum, und dort habe ich eine Hauptklasse, die das Ausgabefenster und die Geräteschnittstelle etc. erstellt.
Jetzt möchte ich in dieser Klasse eine Liste mit Elementen einer so genannten "Entity"-Klasse haben. Ein Entity ist im Grunde irgendein x-beliebiges 3D-Objekt. Diese Liste wird dann in der RenderWorld()-Funktion durchlaufen und jedes Objekt gezeichnet werden.
Aber wie schaffe ich es jetzt bei der Erstellung einer Instanz der Entity-Klasse, dass sich diese in (die für sich ja nicht sichtbare) Hauptklasse einzutragen?
Muss ich die Erstellungsmethode in der Hauptklasse implementieren?
Oder kann man "Klassen in Klassen" machen?
Oder gibt es sogar schlauere Ideen? Mir fällt momentan nichts sinnvolles ein...

Vielen Dank im Voraus für alle Antworten,
Gruß, Pac-Man
18.12.2010 19:49
Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.829
Registriert seit: Dec 2009
Beitrag #2
[.NET] Klasse, die sich in Liste anderer Klasse einträgt
Einfach ne List<Entity> in der Hauptklasse? Ich lös sowas immer so, dass es eine Workspace-Klasse gibt, und jede andere Klasse enthält eine Referenz auf ihren Workspace. So lassen sich Objelte einfach verwalten und die Klassen können sich selbstständig zB in eine Liste im Workspace eintragen.


18.12.2010 20:40
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
friedrichheinze Offline
...und Kondensatoren.

Beiträge: 2.840
Registriert seit: Jul 2008
Beitrag #3
[.NET] Klasse, die sich in Liste anderer Klasse einträgt
Ich weiß grad nich was genau das Problem ist, aber das scheint mir eine einfache Anwendung vom Observer-Pattern zu sein.

Du kannst ja in der Entity-Klasse im Konstruktor einfach die Hauptklasse als Argument übergeben, sodass dann dort eine Methode aufrufen kann, die sie einträgt, oder nicht? Also sowas in Pseudocode(keine Ahnung welche Sprache du hast und wie das da funzt...)

Code:
class Main {
   List<Entities> entityList;

   Main() {
       createEntities();
       /* do something fancy */
       drawAll();
   }

   createEntities() {
      /* Create some entities... */
      createEntity(this);
      createEntity(this);
      createEntity(this);
   }

   register(Entity e) {
      entityList.add(e);
   }

   drawAll() {
      foreach (Entity e : entityList) {
         e.draw();
      }
   }
}
class Entity {
   Entity(Main m) {
      m.register(this);
   }

   draw() {
      /* code */
   }
}
18.12.2010 21:05
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
PacMani
Unregistered

 
Beitrag #4
[.NET] Klasse, die sich in Liste anderer Klasse einträgt
Deine Lösung, friedrichheinze, klingt ganz gut. So wie man in Direct3D (fast) immer den Adapter für etwaige Vorgänge angeben muss, gibt man bei meiner Klasse dann eben die Hauptklasse an.
Ich weiß auch nicht wie ich da gestern darauf kam, aber ich dachte, man könne die Hauptklasse auch irgendwie global für alle Klassen der DLL festlegen, sodass diese dann einfach auf diese Variable zugreifen.
19.12.2010 10:50
Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste