Laden...

Vererbung bei statischen Klassen-->Loch im Kopf

Erstellt von ayrtonsenna vor 18 Jahren Letzter Beitrag vor 18 Jahren 6.748 Views
ayrtonsenna Themenstarter:in
27 Beiträge seit 2006
vor 18 Jahren
Vererbung bei statischen Klassen-->Loch im Kopf

Hallo Liste,

ich habe hier ein Problem, bei dem ich mich irgendwie verheddert habe und aus dem Fitz meine Hirnwindungen nicht mehr rauskomme.
Ich habe eine statische Klasse, die verschiedene Methoden bereitstellt. Also etwa so:


class Klasse1 {
     private static string meinName="Testname";
     public static string Beispiel{
          get { return "Das ist ein sinnloses Beispiel von " + meinName;}
     }
}

soweit ist ja alles prima.
Nun brauche ich aber 2 Arten dieser Klasse, also wo nur ein paar private Variablen anders gesetzt sind. Etwa so:


class Klasse1a {
     private static string meinName="Testname2";
     public static string Beispiel{
          get { return "Das ist ein sinnloses Beispiel von " + meinName;}
     }
}

Es liegt ja nun nahe, dass Klasse1a von Klasse1 erbt, aber da habe ich mich nun verheddert.
Hat jemand von euch eine Idee, wie ich das anstelle?
Danke

4.221 Beiträge seit 2005
vor 18 Jahren

Mach in beiden Klassen statische Constructors und setze die Werte der privaten Variablen in diesem statischen Constructor.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

ayrtonsenna Themenstarter:in
27 Beiträge seit 2006
vor 18 Jahren

Danke für die schnelle Antwort...
aber leider sehe ich den Wald vor lauter Bäumen nicht.
Ich habe Also folgende 2 Klassen:


class Klasse1 {
     private static string meinName;

     static Klasse1() {
          meinName="Testname";
     }

     public static string Beispiel{
          get { return "Das ist ein sinnloses Beispiel von " + meinName;}
     }
}

class Klasse1a : Klasse1 {
     private static string meinName;

     static Klasse1() {
          meinName="Testname2";
     }
}

Wenn ich jetzt

Klasse1a.Beispiel

aufrufe, kommt trotzdem "Testname" und nicht "Testname2".

S
8.746 Beiträge seit 2005
vor 18 Jahren

Das ist korrekt. Damit du "Testname2" bekommst, müßtest du meinName als "virtual" definieren. Das ist aber nicht erlaubt (statische Member dürfen nicht als virtual deklariert werden).

Merke: Polymorphie und statische Klassen schließen sich aus.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo ayrtonsenna,

oder noch kürzer: was du willst, geht nicht.

Du könntest aber auf den Singleton-Pattern ausweichen und das eine Objekt dann das machen lassen, was du jetzt die Klasse machen lässt.

herbivore

S
8.746 Beiträge seit 2005
vor 18 Jahren

Aryton, lass mich raten, du kommst aus der Delphi-Welt...... 😉

Ich frag mich schon länger, warum das in .NET nicht geht. In Delphi gings ja auch.

ayrtonsenna Themenstarter:in
27 Beiträge seit 2006
vor 18 Jahren

Danke für die vielen Antworten... 👍
Den Tipp mit dem Singleton werde ich morgen mal probieren.

@svenson: Respekt... nicht schlecht geraten.

Sven