Polymorphismus für Klassenvariable

p-flash

Erfahrenes Mitglied
Hi,

ich habe eine Gui-Oberklasse mit Klassenvariablen:

PHP:
class AbstractGUI
{
     public static var BGR_IMAGE : String = "sky";
     public static var CONTENT_X : String = 10;
     public static var CONTENT_Y : String = 10;
}
von dieser sollen alle gui-Klassen ableiten und gegebenfalls die eine oder andere Konstante Überladen.

PHP:
class DefaultGUI extends AbstractGUI
{
}
PHP:
class SpecialGUI extends AbstractGUI
{
     public static var BGR_IMAGE : String = "river";
}
je nach dem welches gui gewählt wird sollen die einstellungen dieses guis verwendet werden. Also

PHP:
var main : Main = new Main (gui);
In sehr vielen Klassen werden diese Konstanten benutzt und ein

PHP:
if(gui instanceof SpecialGUI)
 ....
möchte ich verhindern. Hat da jemand eine Idee?

Danke.

p-flash
 
[..] möchte ich verhindern.
Wie hättest Du die Überprüfung denn am liebsten? Was hindert Dich daran, den Wert von "BGR_IMAGE" direkt abzufragen (ist ja public)?

Übrigens:
Code:
public static var CONTENT_Y : String = 10;
Das finde ich ziemlich böse - warum einen numerischen Wert als String deklarieren? :suspekt:

Gruß
.
 
Tobias Menzel hat gesagt.:
Wie hättest Du die Überprüfung denn am liebsten? Was hindert Dich daran, den Wert von "BGR_IMAGE" direkt abzufragen (ist ja public)?

Hi,

was genau meinst du mit direktsfragen? z.B. AbstractGUI.BGR_IMAGE?

Ich hatte es mir so vorgestellt:

Code:
var gui : AbstractGUI;

if (wahl == "default")
    gui = new DefaultGUI();
else
    gui = new SpecialGUI();

tuwas(gui);

function tuwas (gui : AbstractGUI)
{
    trace(gui.BGR_IMAGE);
}

Also je nach dem welches GUI ausgewählt wurde soll der Wert der entsprechenden Klasse genommen werden. Also wenn ich das mit Obect variable machen würde wäre das ja kein Problem. Sollen halt "Konstanten" sein, habe deshalb Klassenvariablen daraus gemacht.


Code:
public static var CONTENT_Y : String = 10;

Habe mich vertippt. Soll natürlich Number sein.

Danke.

p-flash
 
Hi,

na ja - auch wenn es Objektvariablen sind, können es dennoch Konstanten sein. Da Du auf Eigenschaften Deines Hauptobjektes angewiesen bist, würde ich hier auch Objektvariablen verwenden. Du kannst sie ja als private deklarieren und Dir einen Getter basteln.

Gruß
.
 
Zurück