Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Property (https://www.delphipraxis.net/132462-problem-mit-property.html)

FabianClassen 13. Apr 2009 10:49


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:
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.
Wieso kommt da nun so eine komische Ausgabe.
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
;)

mkinzler 13. Apr 2009 10:55

Re: Problem mit Property
 
In der Methode SetName ist ein kleiner Fehler:

Delphi-Quellcode:
procedure TAuto.SetName(Value: string);
begin
  FName := Value;
end;
Ich würde im Konstruktor immer den konstruktor der Superklasse aufrufen (auch wenn es hier unnötig ist)

Delphi-Quellcode:
constructor TAuto.Create(Name: string);
begin
  inherited Create;
  FName := Name;
end;

FabianClassen 13. Apr 2009 10:59

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
;)

mkinzler 13. Apr 2009 11:02

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;

FabianClassen 13. Apr 2009 11:06

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

quendolineDD 13. Apr 2009 11:09

Re: Problem mit Property
 
Ich danke der automatischen Codeerzeugung :p

FabianClassen 13. Apr 2009 11:13

Re: Problem mit Property
 
Zitat:

Zitat von quendolineDD
Ich danke der automatischen Codeerzeugung :p

Ob du es glaubst oder nicht :P
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
;)

jaenicke 13. Apr 2009 11:14

Re: Problem mit Property
 
Richtig von wegen automatische Codeerzeugung, du kannst auch einfach schreiben:
Delphi-Quellcode:
property Name: string read FName write FName;
Dann drückst du Strg + Shift + C und Delphi erzeugt dir automatisch unter private:
Delphi-Quellcode:
FName: string;
Und es geht noch besser, wenn du das schreibst:
Delphi-Quellcode:
property Name: string read GetName write SetName;
Dann erzeugt dir Delphi vollautomatisch die Prozedur SetName und die Funktion GetName, inkl. Gerüst. Du musst dann nur noch den Code unten hineinschreiben.

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.

FabianClassen 13. Apr 2009 11:17

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
;)

jaenicke 13. Apr 2009 11:20

Re: Problem mit Property
 
In der Hilfe von Turbo Delphi gib einfach diese Adresse ein, ich hab grad schnell nachgeschaut:
Code:
ms-help://borland.bds4/bds4ref/html/KeyMappingsDefault.htm
Das ist aber nicht besonders ausführlich was solche Tricks angeht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz