OOP - Extends Types Globale Felder zuordnen

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Der Eisvogel

Betreff: OOP - Extends Types Globale Felder zuordnen

BeitragMi, Jul 28, 2010 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
Wieder eine OOP-Frage. Also erstmal ein Code
BlitzMax: [AUSKLAPPEN]
Type Main
Global mains:TList = CreateList()
Field x:Int
Field y:Int
End Type

Type test Extends Main
Global tests:TList=CreateList()
Field w:Int
Field h:Int
End Type


So, ich habe in meinem main-Type eine List, in der ich alle Object vom Type main speichere. Jetzt habe ich ebenfalls eine List im Type test, der von main abstammt, in der ich alle test-Objekte speichere.
Jetzt erstelle ich ganz viele Types, die alle von main abstammen. Normalerweise würde ich jetzt jeden neuen Type eine neu Liste mittels "Global list:TList=CreateList()" zuordnen. Kann ich das aber auch irgendwie so machen, das ich im main-Type eine Liste anlege, die in jedem Sub-Type dann eine andere Liste des jeweiligen Sub-Types darstellt? Oder generell, dass jedem Subtype automatisch ein Globales Feld zugeordnet wird, dass aber in jedem Sub-Type anders genutzt werden kann?

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

BladeRunner

Moderator

BeitragMi, Jul 28, 2010 13:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach nur in Main die Liste und speichere Deine Einträge hinein. Du kannst dann per for bla:TdeinKlassenname = eachin tmain.liste nur die jeweiligen Subklassenmember durchiterieren. Nachteil: ein Wwenig langsamer, da alle nichtgewünschten Member übersprungen werden müssen, Vorteil: Universell.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Der Eisvogel

BeitragMi, Jul 28, 2010 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist eben das Problem die Geschwindigkeit. In wie fern wird das bemerkbar?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

BladeRunner

Moderator

BeitragMi, Jul 28, 2010 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kann man so pauschal nicht beantworten, das hängt sicher von der Anzahl an Einträgen ab.
Ein Workaround wäre im BasisType ein Array von Listen anzulegen und die Subklassen nur in ein bestimmtes Arrayfeld eintragen zu lassen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Der Eisvogel

BeitragMi, Jul 28, 2010 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja das wär auch ne Möglichkeit, aber dann müsste ich wieder jedem Sub-Type sagen, welches Feld ihm gehört. Dann kann ich auch wieder jedem Sub-Type seine eigene Liste machen.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

BladeRunner

Moderator

BeitragMi, Jul 28, 2010 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kannst Du aber ein einziges mal in einer Constante festlegen. Nicht grade der Riesenaufwand.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Der Eisvogel

BeitragMi, Jul 28, 2010 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok also entweder reden wir grade aneinander vorbei, oder ich versteh dich nicht richtig. Kannst du mir kurz nen Code-Bsp geben?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

BladeRunner

Moderator

BeitragMi, Jul 28, 2010 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
SuperStrict

Type TMain
   
   Const _numsubs:Int = 2   'wieviele Subtypen gibt es
   Const _SUBFOO:Int = 0   'nummern der Einzelnen Typen
   Const _SUBBAR:Int = 1   'dito
   Global _arrlists:TList[_numsubs]
   
   Method New()
      DebugLog "TMain Constructor called."
      For Local i:Int = 0 Until _numsubs   'Die Listen werden bei der ersten Benutzung initialisiert
         If _arrlists[i] = Null
            _arrlists[i] = New TList
         End If
      Next
   End method

End Type

Type TFoo Extends TMain
   
   Method New()
      DebugLog "TFoo Constructor called."
      _arrlists[_SUBFOO].addlast(Self)
   End Method
   
   Function Print()
      .Print "~nListing all TFoo Instances:"
      For Local foo:TFoo = EachIn _arrlists[_SUBFOO]
         .Print "TFoo Instance"
      Next
   End Function
End Type

Type TBar Extends TMain
   
   Method New()
      DebugLog "TBar Constructor called."
      _arrlists[_SUBBAR].addlast(Self)
   End Method

End Type

'so, wir erstellen ein paar Instancen:
For Local i:Int = 0 To 5
   New TFoo
   New TBar
Next


Ist halt ein recht dreckiger Workaround, aber er tut es.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group