Announcement

Collapse
No announcement yet.

Abgeleiteten Klassen-Konstruktor vor Basis-Konstruktor ausführen.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abgeleiteten Klassen-Konstruktor vor Basis-Konstruktor ausführen.

    Hallo,

    Ich leite exemplarisch wie folgt eine Klasse ab:
    [highlight=csharp]
    class MeineKlasse : BaseClass {

    public MeineKlasse( int somevalue ) {

    //...

    }

    }
    [/highlight]Nun ist das Verhalten ja so, dass bei Instanziierung der Klasse MeineKlasse als erstes der Basis-Konstruktor aufgerufen wird.
    Das Problem ist, dass der Basiskonstruktor zwei Argumente benötigt, die vom Typ her ebenfalls anders sind.
    Diese Argumente möchte ich aber in meinem Konstruktor erstz vorbereiten und dann den Basiskonstruktor mit den vorbereiteten Argumenten aufrufen.

    Gibt es da relativ überschaubare Möglichkeiten?
    Danke
    PHP rocks!
    Eine Initiative der PHP Community

  • #2
    - Rufe den Basisklassenkonstruktor mit einer Methode als Parameter auf in dem du den Paramtewert berechnest.
    oder
    - Lagere die Funktionalität des Basisklassenkonstruktors in eine Methode aus die du zu einem belibiegen Zeitpunkt aufrufen kannst (Initializen Methoden die vom Konstruktor aufgerufen werden sieht man häufiger)

    Comment


    • #3
      Meine Meinung ist auch dass in einem Konstruktor eigentlich keine "Logik" vorhanden sein sollte. In meinem Code macht der Konstruktor grundsaetzlich nur Basis Feldzuweisungen und Vorbelegungen (z.B. Listenobjekte instanziieren oder privaten Felder standardwerte zuweisen). Meistens werden dann sowieso nur dependencies injected

      Comment


      • #4
        Hallo,

        Danke für eure Antworten.

        Originally posted by Ralf Jansen
        Rufe den Basisklassenkonstruktor mit einer Methode als Parameter auf in dem du den Paramtewert berechnest
        Ich glaube, das ist das was ich brauche, vielen Dank!

        Die Parameter muss ich in dem Fall zwar nicht berechnen, weil die über ein Assembly eh schon abrufbar sind, aber das Prinzip ist, glaube ich das, was Du meinst ( wieder schematisch ):
        [highlight=csharp]
        class MeineKlasse : BaseClass {

        public MeineKlasse( int somevalue ) : base( Namespace.Class.Object1, Namespace.Class.Object2 ) {

        //...

        }

        }
        [/highlight]
        Auf die Weise brauche die beiden Objekt-Argumente nicht für die Instanziierung, da diese direkt über einen vorhanden Namespace greifbar sind.
        Die Angaben der beiden Argumente wären nun nach Deinem Vorschlag nichts weiter, wie Methodenaufrufe, die nach einer evtl. Berechnung genau diese Werte zurück geben.

        Mein Aufruf funktioniert nun auf diese Weise:
        [highlight=csharp]MeineKlasse obj = new MeineKlasse( 123 );[/highlight]
        Der Basiskonstruktor wird sauber aufgerufen und ich habe ein konformes Objekt, wie ich es benötige.

        Danke für eure Beiträge!
        Gruß Arne
        PHP rocks!
        Eine Initiative der PHP Community

        Comment


        • #5
          Hallo,

          Ich frage nochmal nach, weil ich die variante mit den Methodenaufrufen besser finde.
          Momentan versuche ich es auf diese Weise:
          [highlight=csharp]
          class MeineKlasse : BaseClass {

          public MeineKlasse( int somevalue ) : base( getObject1(), getObject2() ) {

          //...

          }


          public Namespace.Class.Object getObject1() {

          // evtl. vorgehende verarbeitung
          return Namespace.Class.Object1;

          }


          public Namespace.Class.Object getObject2() {

          // evtl. vorgehende verarbeitung
          return Namespace.Class.Object2;

          }


          }
          [/highlight]Hier sagt er, dass beide Methoden oder Eigenschaften einen Objektverweis benötigen. Nutze ich this, sagt er, dass das Schlüsselwort dort nicht hingehört.
          Wie kann ich denn nun die Methodenaufrufe als Parameter nutzen?

          Danke
          PHP rocks!
          Eine Initiative der PHP Community

          Comment


          • #6
            Die Methoden sollten static sein. Sehe denn Nutzen an dieser Stelle für nicht statische Methoden auch nicht. Welchen Kontext der Klasse könnte man da brauchen wenn es das erste ist das im Konstruktor ausgeführt wird ist?

            Comment

            Working...
            X