AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi - Eigenschaften

Ein Thema von jsphde · begonnen am 11. Feb 2018 · letzter Beitrag vom 12. Feb 2018
Antwort Antwort
jsphde

Registriert seit: 14. Nov 2017
14 Beiträge
 
#1

Delphi - Eigenschaften

  Alt 11. Feb 2018, 18:28
Guten Abend allerseits,

ich hätte eine Frage zu Klasseneigenschaften in Delphi:

Beispiel:
Delphi-Quellcode:
type
  TTest = class
    public
      Eins: String;
      property Zwei //[...]
    published
    protected
    private
  end;
Man kann ja auf beides zugreifen, sobald man eine Instanz erstellt hat.
Meine Frage dazu:
Was ist der Unterschied zwischen Eins und Zwei ? Man kann von außen auf beide zugreifen, sie lesen und ggf. überschreiben.
(Eventuell ist der Verwendungszweck unterschiedlich, wenn Ja, wann verwendet man Eins wann Zwei?)
Soweit ich weiß, wird beides als "Eigenschaft" bezeichnet.

Mit freundlichen Grüßen

Geändert von jsphde (11. Feb 2018 um 18:38 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Delphi - Eigenschaften

  Alt 11. Feb 2018, 18:42
Properties existieren nur im Code nicht zur Laufzeit. Sie dienen als "Trick" um einerseits information hiding/blackbox zu gewährleisten und andererseits "direkten" Zugriff auf Eigenschaften zu bieten.

Delphi-Quellcode:
type
  TTest = class
    private
      FEins: Integer;
      function getZwei: Integer;
    published
      property Eins: Integer read FEins write FEins;
      property Zwei: Integer read getZwei;
   end;

...
   Test := TTest.Create;
Delphi-Quellcode:
   
   Test.Eins = 200;
   h := Test.Zwei;
wird zu
Delphi-Quellcode:
   
   Test.FEins = 200;
   h := Test.getZwei;
Markus Kinzler
  Mit Zitat antworten Zitat
jsphde

Registriert seit: 14. Nov 2017
14 Beiträge
 
#3

AW: Delphi - Eigenschaften

  Alt 11. Feb 2018, 18:53
Vielen Dank für deine Antwort.

Also könnte man sagen, dass man "Eins" nur innerhalb der Klasse verwendet und von außen
über "Zwei" (property) darauf zugreift? (In der Praxis)



Mit freundlichen Grüßen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Delphi - Eigenschaften

  Alt 11. Feb 2018, 18:57
Das ist der Unterschied zwischen private (eigentlich nur strict private) und public.
Auf eine private Property kann auch nicht von ausserhalb( der Unit) zugegriffen werden. Auf eine public Eigenschaft aber schon.

Der Compiler ersetzt die Zugriffe auf eine Property mit der angegeben "Funktion": Lesezugriffe mit der bei read Schreibzugriffe mir der bei write.
Markus Kinzler

Geändert von mkinzler (11. Feb 2018 um 19:03 Uhr)
  Mit Zitat antworten Zitat
jsphde

Registriert seit: 14. Nov 2017
14 Beiträge
 
#5

AW: Delphi - Eigenschaften

  Alt 11. Feb 2018, 18:59
Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.263 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi - Eigenschaften

  Alt 11. Feb 2018, 21:40
Jupp, von der Definition her ist es erstmal rech einfach zu verstehen:

private kann nur die Klasse selber, also auch keine Nachfahren
protected kann nur die Klasse und ihre Nachfahren
public können Alle
und published ist wie public mit Zusatzinfos für das Streaming, also da können auch auch fremde Klassen über die TypeInfo (RTTI) drauf zugreifen.


published: siehe Unit Delphi-Referenz durchsuchenTypInfo sowie Delphi-Referenz durchsuchenTObject.MethodAddress, Delphi-Referenz durchsuchenTObject.MethodName und Delphi-Referenz durchsuchenTObject.FieldAddress.
Für Klassen ab Delphi-Referenz durchsuchenTPersistent/TComponent ist die Standatd-Sichtbarkeit von public auf published geändert > siehe {$TYPEINFO} / {$M+}
Diese Funktionen werden z.B. für das Streaming der DFM verwendet.

Und dann noch der Sonderfall innerhalb der eigenen Unit.
Innerhalb einer Unit ist ALLES dort Deklarierte wie public, also auch fremde Prozeduren und Klassen dürfen auf alles zugreifen.
Darum wurde inzwischen das strict eingeführt, also strict private und strict protected sind nur dort so, wie es die Grunddefinion für private und protected besagt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:51 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