![]() |
Problem mit Property
Hi
ich wollte mich heute etwas mehr mit der OOP in Delphi auseinander setzen. Ich selbst kann schon C++ und Java und dadurch dürfte das eigentlich kein Problem sein. ... Nun sind mir die Propertys besonders neu ... in C++ und Java muss ich ja mit Gettern und Settern arbeiten. Naja Propertys scheinen mir da auch nicht groß was anderes zu sein ... quasi ein Konstrukt, was automatisch erkennt, ob der Getter oder der Setter aufgerufen werden soll. Nun habe ich folgende winzige Klasse entwickelt um mir das Prinzip der Propertys vor Augen zu führen ... aber ich erhalte eine komische mir noch nicht ganz klare Ausgabe: Ford Focus 200 Ford Focus 320 Hier ist mein Delphi Code ... Mir ist bewusst das ich vll die Klasse besser in eine andere Unit ausgelagert hätte ... aber zu Übungszwecken reichts ja :)
Delphi-Quellcode:
Wieso kommt da nun so eine komische Ausgabe.
program Klassentest_Projekt;
{$APPTYPE CONSOLE} uses SysUtils; type TAuto = class private FGeschw: Integer; FName: string; function GetGeschw: Integer; procedure SetGeschw(Value: Integer); function GetName: string; procedure SetName(Value: string); public property Geschwindigkeit: Integer read GetGeschw write SetGeschw; property Name: string read GetName write SetName; constructor Create(Name: string); end; function TAuto.GetGeschw: Integer; begin Result := FGeschw; end; procedure TAuto.SetGeschw(Value: Integer); begin FGeschw := Value end; function TAuto.GetName: string; begin Result := FName; end; procedure TAuto.SetName(Value: string); begin FName := Name; end; constructor TAuto.Create(Name: string); begin FName := Name; end; var Auto: TAuto; begin { TODO -oUser -cConsole Main : Hier Code einfügen } Auto := TAuto.Create('Ford Focus'); Writeln(Auto.Name); Auto.Geschwindigkeit := 200; Writeln(Auto.Geschwindigkeit); Auto.Name := 'Porsche Turbo'; Auto.Geschwindigkeit := 320; Writeln(Auto.Name); Writeln(Auto.Geschwindigkeit); Readln; end. Ich habe doch den Namen des Autos auf 'Porsche Turbo' gestellt. Hängt das vll irgendwie mit dem constructor zusammen. Anders kann ich mir das nicht vorstellen. Ich hoffe ihr könnt mir helfen ... na klar könnt ihr das :P ist bestimmt nur irgendein dummer Fehler ;) Danke schonmal im vorraus. MFG FC ;) |
Re: Problem mit Property
In der Methode SetName ist ein kleiner Fehler:
Delphi-Quellcode:
Ich würde im Konstruktor immer den konstruktor der Superklasse aufrufen (auch wenn es hier unnötig ist)
procedure TAuto.SetName(Value: string);
begin FName := Value; end;
Delphi-Quellcode:
constructor TAuto.Create(Name: string);
begin inherited Create; FName := Name; end; |
Re: Problem mit Property
oh ... das ist jetzt peinlich :D
So ein dummer Anfängerfehler :P Hätte ich besser nicht gesagt, dass ich Java und C++ eigentlich ganz passabel kann :D Auf jedenfall vielen Dank. MFG FC ;) |
Re: Problem mit Property
Glaub mir sowas passiert nicht nur Anfängern. :zwinker:
In deinem Fall könntest du auf die Getter/Setter auch verzichten und gleich an die privaten Felder durchreichen:
Delphi-Quellcode:
property Name: string read FName write FName;
|
Re: Problem mit Property
Ah ... das ist ja praktisch.
Da erspare ich mir viel Schreibarbeit. :D Danke ... MFG FC ;) PS: Demnächst ist das Kontrolieren der Variablenamen mein erster Schritt beim Debuggen :D |
Re: Problem mit Property
Ich danke der automatischen Codeerzeugung :p
|
Re: Problem mit Property
Zitat:
Tippen ist besser zum lernen :D ... ok ... ab und zu nutze ich Codevervollständigung und Co. auch ganz gerne :P Vielleicht auch was öfter. MFG FC ;) |
Re: Problem mit Property
Richtig von wegen automatische Codeerzeugung, du kannst auch einfach schreiben:
Delphi-Quellcode:
Dann drückst du Strg + Shift + C und Delphi erzeugt dir automatisch unter private:
property Name: string read FName write FName;
Delphi-Quellcode:
Und es geht noch besser, wenn du das schreibst:
FName: string;
Delphi-Quellcode:
Dann erzeugt dir Delphi vollautomatisch die Prozedur SetName und die Funktion GetName, inkl. Gerüst. Du musst dann nur noch den Code unten hineinschreiben.
property Name: string read GetName write SetName;
Das geht nicht mit Personal Editions, nur mit Professional Versionen und Turbo Delphi (auch Explorer), was du ja hast. Mit Strg + Shift + C kannst du dir auch zu einer oben in der Deklaration geschriebenen Prozedur das Gerüst unten erstellen lassen. Und mit Strg + Shift + Pfeil hoch/runter wechselst du zwischen Deklaration und Implementierung einer Methode. |
Re: Problem mit Property
Danke.
Das probiere ich gleich mal aus. Mal ne Frage ... wo kann ich diese IDE-Specials nachgucken ... bzw. wo sind die in der Hilfe? Wäre nett wenn du mir das sagen könntest. Ich suche zwar selber mal ... aber ... naja. MFG Fab ;) |
Re: Problem mit Property
In der Hilfe von Turbo Delphi gib einfach diese Adresse ein, ich hab grad schnell nachgeschaut:
Code:
Das ist aber nicht besonders ausführlich was solche Tricks angeht.
ms-help://borland.bds4/bds4ref/html/KeyMappingsDefault.htm
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz