Announcement

Collapse
No announcement yet.

Frage zur objektorientieren Programmieren

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

  • Frage zur objektorientieren Programmieren

    In meinem Programm gibt es folgende Aufrufe

    MeineKlasse.FieldByName('PipaPo').AsString;

    Ich möchte eine Klasse "MeineKlasse" schreiben, in der es eine Methode "FieldByName" gibt, die man mit einer Eigenschaft "AsString" (oder etwas anderes) aufrufen kann.

    Was muß man machen, damit man ".AsString" beim Aufrufen der Methode anhängen kann

  • #2
    Was muß man machen, damit man ".AsString" beim Aufrufen der Methode anhängen kann
    Man muss die FieldByName Methode so schreiben das sie eine Klasse zurück gibt die eine AsString Methode/Eigenschaft hat.

    Comment


    • #3
      Originally posted by Ralf Jansen View Post
      Man muss die FieldByName Methode so schreiben das sie eine Klasse zurück gibt die eine AsString Methode/Eigenschaft hat.

      Danke, das habe ich hinbekommen.

      Was muß ich aber machen, um dem Ausdruck etwas zuweisen zu können.
      Also z.B. Folgendes

      MeineKlasse.FieldByName('PipaPo').AsString := '123';

      Comment


      • #4
        Dann muss die Klasse mit der Eigenschaft auch eine Methode zu setzen der Eigenschaft (write) anbieten
        Christian

        Comment


        • #5
          In Delphi ist der SourceCode der VCL üblicherweise dabei. Sieh dir doch einfach mal die Implementierung von TField.AsString an wenn du eine Klasse schreibst die sich genauso/ähnlich verhalten soll. Da wirst du auch stellen mit beschreibbaren Properties finden. Der VCL SourceCode ist meist lehrreicher als die Doku.

          Übrigens von einer Property die AsString heißt würde man kaum erwarten das man die setzen kann. Vielleicht mal über das Naming nachdenken.

          Comment


          • #6
            Originally posted by Ralf Jansen View Post
            In Delphi ist der SourceCode der VCL üblicherweise dabei. Sieh dir doch einfach mal die Implementierung von TField.AsString an wenn du eine Klasse schreibst die sich genauso/ähnlich verhalten soll. Da wirst du auch stellen mit beschreibbaren Properties finden. Der VCL SourceCode ist meist lehrreicher als die Doku.

            Übrigens von einer Property die AsString heißt würde man kaum erwarten das man die setzen kann. Vielleicht mal über das Naming nachdenken.


            Die BDE hat "AsString" verwendet, um mit "FieldByName" etwas zu speichern. Das ist der eigentliche Grund für diese Arbeit. In einem Programm werden Daten aus der BDE gelesen, um den Sortierschlüssel zu setzen, wird mit "AsString" etwas zugewiesen.
            Nun sollen die BDE Objekte entfernt werden. Das Lesen der Daten soll aus einer völlig anders gearteten Datei erfolgen, nach Möglichkeit ohne etwas am alten Code zu verändern. Es soll einfach ein Objekt einer neuen Klasse ergänzt werden, danach soll alles ohne Änderung laufen. Das wird auch funktionieren, nur komme ich eben bei der Zuweisung nicht weiter.

            Den Code von FieldByname habe ich mir natürlich angesehen. Leider kann ich mit dem Debugger aber nicht durchsteppen, sodaß ich meinen Gedankenfehler nicht sehe. "Verkleinert" habe ich folgendes Problem. Vielleicht sieht jemand, wo ich etwas falsch mache.


            Die Klasse mit der Property "AsString" hat den Namen "TFormMyDaten"

            Die Klasse mit der Methode "FieldByname" hat den Namen "TFormSprachen"


            DatenString ein Objekt von "TFormMyDaten", besitzt also auch die Property AsString



            function TFormMySprachen.FieldByName(const FieldName: WideString): TFormMyDaten;
            begin
            FieldString := FieldName;
            FieldByName := DatenString; <--- Da müßte '123' in die Property AsString hinein
            end;


            Ich rufe nun Folgendes auf:
            MeineKlasse.FieldByName('PipaPo').AsString := '123';

            Wie soll denn der Wert '123' in die Property hineinkommen

            Comment


            • #7
              Wie soll denn der Wert '123' in die Property hineinkommen
              Eine Property hat kann eine Methode zum lesen und schreiben haben. Ist nur eine vorhanden, kann halt nur gelesen werden.


              Wenn es nicht deine eigene Klasse ist, in der du dem Property eine WRITE-Methode hinzufügen kannst -> gar nicht

              Dann musst du ein eigene Klasse ableiten und überlagern
              Christian

              Comment


              • #8
                Originally posted by Christian Marquardt View Post
                Eine Property hat kann eine Methode zum lesen und schreiben haben. Ist nur eine vorhanden, kann halt nur gelesen werden.


                Wenn es nicht deine eigene Klasse ist, in der du dem Property eine WRITE-Methode hinzufügen kannst -> gar nicht

                Dann musst du ein eigene Klasse ableiten und überlagern
                Das sind alles meine Klassen. Es gibt eine Read und eine Write Property.
                Alles mache ich irgendetwas an der Write Property falsch.

                Comment

                Working...
                X