Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Was ist ein "Property" intern? (https://www.delphipraxis.net/30143-ist-ein-property-intern.html)

Oxmyx 21. Sep 2004 13:46


Was ist ein "Property" intern?
 
Delphi-Quellcode:
interface

type
  CIrgendwas = class
  private
    zahl: Integer;
  public
    property GetZahl read zahl;
    function GetZahl(): Integer;
  end;

implementation

function CIrgenwas.GetZahl(): Integer;
begin
  Result := zahl;
end;
Hier ein kleines Beispiel, mit dem ich eine Membervariable auslesen kann. Aber was von den beiden ist schneller? Das Property GetZahl oder die gleichnamige Funktion? Das Problem mit dem Funktionsaufruf ist, dass es eben ein Funktionsaufruf ist. C++ würde so eine Funktion wohl automatisch inlinen, aber das kann Delphi ja nicht.
Jetzt frage ich mich, was das Property genau macht. Wird da einfach die Variable zahl an die entsprechenden Stellen im Quellcode kopiert, oder findet hier wie bei der gewöhnlichen Funktion auch ein Funktionsaufruf statt?

Dax 21. Sep 2004 14:24

Re: Was ist ein "Property" intern?
 
Wenn du wissen willst, was schneller ist:
Delphi-Quellcode:
property GetZahl read zahl;
ist schneller.

Zu der zweiten Frage: Ein Property "macht" nichts! Klassen sind im Prinzip nur records, die man mit Methoden spicken kann. DElphi versteckt einige Teile des Recors vor dem Programmierer, aber eine Klasse ist ein record, womit Properties nichts anderes als Record-Felder sind.

Chewie 21. Sep 2004 14:32

Re: Was ist ein "Property" intern?
 
Zitat:

Zitat von Dax
womit Properties nichts anderes als Record-Felder sind.

Nein. Properties sind nur Entwicklungszeit-Hilfen, die im Compilat nicht mehr vorkommen (jetzt mal die published Properties ausgenommen). Ein Property ist ein Platzhalter entweder für eine Methode oder ein Feld.

Folgende zwei Konstruktionen erzeugen also den gleichen Code:
Delphi-Quellcode:
type
  TMyClass1 = class
  private
    FField: Integer;
  public
    Field: Integer read FField;
  end;

begin
  with TMyClass1.Create do
  begin
    ShowMessage(InttoStr(Field));
    Free;
  end;
 
  //oder

  with TMyClass1.Create do
  begin
    ShowMessage(InttoStr(FField));
    Free;
  end;

sakura 21. Sep 2004 14:38

Re: Was ist ein "Property" intern?
 
Zitat:

Zitat von Chewie
Folgende zwei Konstruktionen erzeugen also den gleichen Code:

Aber nur weil die Property nicht über eine Methode ausgelesen wird ;-) und darum ging es oben wohl. Delphi 9 soll inlining unterstützen. Schön wäre es jetzt zu wissen, ob inlining auch an dieser Stelle unterstützt werden wird...

...:cat:...

Chewie 21. Sep 2004 14:44

Re: Was ist ein "Property" intern?
 
Zitat:

Zitat von sakura
Aber nur weil die Property nicht über eine Methode ausgelesen wird ;-) und darum ging es oben wohl.

Richtig, aber ich bezog mich auf den Satz von Dax. Bei einer Methode gilt das gleiche, ob der Aufruf direkt oder über das Property erfolgt, ist wurscht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 Uhr.

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