AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

Ein Thema von Der schöne Günther · begonnen am 21. Mai 2013 · letzter Beitrag vom 21. Mai 2013
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
5.787 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

  Alt 21. Mai 2013, 11:24
Delphi-Version: XE2
Hallo-

Ich komme auf keinen grünen Zweig, wo im Jahr 2013 des Herrn sich noch ein Unterschied von published zu public verbirgt. Als Delphi anscheinend noch nur rudimentäre RTTI-Konzepte verfügte, musste man Member einer Klasse wohl explizit mit published kennzeichnen um mittels RTTI überhaupt darauf zugreifen zu können.

Die RAD-Hilfe (Stand: XE4) schreibt hierzu:

C++:
Zitat:
Das Schlüsselwort __published wurde zur Unterstützung der VCL hinzugefügt. Dieser öffentliche Member-Zugriffsspezifizierer entspricht dem public Spezifizierer, aber __published verfügt über vom Compiler erzeugte RTTI (Run-Time Type Identification, Identifikation von Typen zur Laufzeit). Das bedeutet, dass die __published Eigenschaften beim Entwurf im Objektinspektor erscheinen.
(Quelle)


Delphi:
Zitat:
Bei Klassen, die von TPersistent abgeleitet sind, werden in einem published-Abschnitt Eigenschaften und Ereignisse deklariert, die zur Entwurfszeit verfügbar sind. Ein published-Element hat dieselbe Sichtbarkeit wie ein public-Element, aber der Compiler erzeugt Laufzeittypinformationen für die published-Elemente. published-Eigenschaften erscheinen zur Entwurfszeit im Objektinspektor.
(Quelle)

Besonders im Delphi-Fall scheint das wieder etwas zu sein, was seit zehn Jahren dort steht und seitdem niemand mehr angefasst hat. Denn entweder liege ich komplett daneben, oder
  • Ich komme mittels RTTI genauso auf die public-Elemente
  • Kann ich mir im Objektinspektor auch alles mit beliebigem Sichtbarkeitsmodifikator anzeigen lassen

Möglicherweise irre ich mich in zwei Dingen:
  • Mit Objektinspektor ist etwas vollkommen anderes gemeint als ich verstehe - Beispielsweise irgendetwas beim Debuggen?
  • Mittels RTTI kann ich über published Member noch viel Mehr in Erfahrung bringen, als über schnöde public Member. Nur was?


Ich freue mich auf Erleuchtung
  Mit Zitat antworten Zitat
Daniel
(Administrator)

Registriert seit: 30. Mai 2002
Ort: Hamburg
15.486 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

  Alt 21. Mai 2013, 11:26
Wenn Du selbst eine Komponente schreibst und deren Eigenschaften im Objekt-Inspektor sehen (und verändern) möchtest, dann müssen diese im "published"-Bereich liegen. Nur dann werden sie auch automatisch vom Streaming-System erfasst und landen in der .DFM-Datei.
Daniel R. Wolf
Admin Delphi-PRAXiS
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

  Alt 21. Mai 2013, 11:34
Auf die published Member kannst du mit Delphi-Referenz durchsuchenSystem.TypInfo.GetPropValue bzw. Delphi-Referenz durchsuchenSystem.TypInfo.SetPropValue etc. zugreifen.

Für die anderen Member benötigst du Delphi-Referenz durchsuchenSystem.Rtti -> erweiterte RTTI
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.943 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

  Alt 21. Mai 2013, 11:35
Es gibt die RTTI (Seit D1) und die extended RTTI (Seit D2009?)
Für die "normale" RTTI gelten die Aussagen noch. Extended RTTI kann man ja aktivieren/deaktivieren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.787 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

  Alt 21. Mai 2013, 11:40
Extended RTTI habe ich so oder so drin und abwärtskompatibel zu alten Delphi-Versionen muss es auch nicht sein, also macht das die Sache ja einfacher

Zusammenfassend ist es also nur eine Sache die nötig ist, damit die Delphi-IDE weiß, was sie zur Serialisierung in die .DFM-Datei hernehmen muss? Wäre es heute auch noch gängige Praxis, in Delphi eine Klasse so aufzubauen, dass langlebige Eigenschaften published und laufzeitabhängige Dinge nicht published sind?

(Man merkt vielleicht, dass diese Frage hier nur ein Vorläufer für meine eigentliche ist - Ich mache mich gerade schlau, wie ich in Delphi eine Serialisierung von eigenen Objekten möglichst elegant und automatisiert über die Bühne bringe...)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.243 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

  Alt 21. Mai 2013, 12:38
... dafür sind Attribute noch ganz nützlich.
So kannst Du Felder oder Eigenschaften kennzeichnen, ob und wie sie serialisiert werden sollen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.296 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

  Alt 21. Mai 2013, 12:42
(Man merkt vielleicht, dass diese Frage hier nur ein Vorläufer für meine eigentliche ist - Ich mache mich gerade schlau, wie ich in Delphi eine Serialisierung von eigenen Objekten möglichst elegant und automatisiert über die Bühne bringe...)
kommt drauf an was du genau machen willst, die Du die Serialisierung steuern willst usw....

ich habe mit der alten RTTI und 2 Methoden mein Klassenmodell sehr simpel, schnell und zuverlässig serialisieren und deserialisieren können. Die neue RTTI habe ich nicht verwendet, weil nicht benötigt und zudem ist sie schlicht langsamer als TypInfo (oder zumindest war sie zu zeiten XE/XE2).

Ich fand es immer sehr angenehm die Properties zur Entwurfszeit schon dadurch unterscheiden zu können, was serialisiert (dann unter published) und was eben nicht gespeichert werden soll (public) zu trennen. Wüsste aber ehrlich gesagt nicht ob ich das heute noch immer so machen würde

Um auf deine Frage antworten zu können: einen Königsweg gibt es nicht und elegant und automatisiert kannst Du das per neuer und auch alter RTTI machen...

Grüße
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.787 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

  Alt 21. Mai 2013, 13:09
... dafür sind Attribute noch ganz nützlich.
Faszinierend. Von deren Existenz wusste ich bislang nichts. Die ersten zwei Treffer der Suchmaschine meines Vertrauens zu "delphi attribute" sehen schon sehr vielversprechend aus, das geht eindeutig in die richtige Richtung

Ich fand es immer sehr angenehm die Properties zur Entwurfszeit schon dadurch unterscheiden zu können, was serialisiert (dann unter published) und was eben nicht gespeichert werden soll (public) zu trennen.
Dem ersten Teil stimme ich voll zu, dem zweiten weniger. Entweder stehe ich heute auf dem Schlauch oder ich hätte es nicht gerne, Dinge voll sichtbar zu haben (published) zu haben, die ich am Objekt eigentlich nicht von außen geändert haben möchte. Aber das nur am Rande.

Um auf deine Frage antworten zu können: einen Königsweg gibt es nicht und elegant und automatisiert kannst Du das per neuer und auch alter RTTI machen...
Dein Tutorial mittels "alter" RTTI habe ich schon gesehen Momentan schaue ich mir die DataSnap-Komponenten und ihre JSON-Methoden an, aber das führt hier zu weit. Im Verlaufe des Tages mache ich da wohl ein eigenes Thema draus.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.296 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Unterschied Sichtbarkeitsmodifikator 'Published' zu 'Public'

  Alt 21. Mai 2013, 13:39

Ich fand es immer sehr angenehm die Properties zur Entwurfszeit schon dadurch unterscheiden zu können, was serialisiert (dann unter published) und was eben nicht gespeichert werden soll (public) zu trennen.
Dem ersten Teil stimme ich voll zu, dem zweiten weniger. Entweder stehe ich heute auf dem Schlauch oder ich hätte es nicht gerne, Dinge voll sichtbar zu haben (published) zu haben, die ich am Objekt eigentlich nicht von außen geändert haben möchte. Aber das nur am Rande.
hm... warum speichert man Dinge ab, die man dann nie mehr in das Objekt laden kann? Macht doch keinen Sinn oder verstehe ich dein Ansinnen falsch?

Dein Tutorial mittels "alter" RTTI habe ich schon gesehen
freut mich, wenn das noch jemand ließt...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf