![]() |
[Class Operator] Zugriff auf privates Feld des Records
Hi DP'ler,
diesmal hab ich eine Frage zu einem (möglichst ^^) sauberen Programmier-Stil. Ich habe vor einigen Wochen die Klassen-Operatoren entdeckt ( :mrgreen: ), und diese mal ausprobiert, dabei bin ich nun bei folgendem Gerüst gelandet:
Delphi-Quellcode:
Mir geht es dabei um den Zugriff in der Implicit-Funktion auf das private Feld: Ist das sauber von der Programmierung her?
type
TMyRecord = record strict private FValue: Integer; public class operator Implicit(const I: Integer): TMyRecord; class operator Implicit(const MR: TMyRecord): Integer; end; [...] class operator TmtgColor.Implicit(const MR: TMyRecord): Integer; begin Result := MR.FValue; // Zugriff auf privates Feld? end; Ich hätte jetzt vermutet, dass man durch den Zugriff über MR "von außen" auf das Record zugreift, und somit das FValue nicht erreichbar sein dürfte. Allerdings scheint der Class Operator das (Strict) Private auszuhebeln, denn der Compiler hat nix dagegen, kompiliert und funktioniert wunderbar so. Doch irgendwie gefällt mir das nicht... Was meint ihr dazu? Sollte ich (man) das so lassen, oder eher eine öffentliche Property zur Verfügung stellen, um einen (meiner Meinung nach) saubereren Zugriff auf den internen Wert zu bekommen? (Wie gesagt, mir persönlich ist es irgendwie ein Dorn im Auge, von außen auf ein privates Feld zuzugreifen.) [Anmerkung: Es finden in den Implicit-Funktionen noch ein paar Umrechnungen statt, ist also mehr als nur eine einfache Zuweisung ;)] Würde mich über ein paar Meinungen freuen. MfG Zwoetzen |
Re: [Class Operator] Zugriff auf privates Feld des Records
Der Class Operator gehört ja zum Typ, ist also nicht von "aussen"
|
Re: [Class Operator] Zugriff auf privates Feld des Records
Stimmt, da hast du auch wieder recht. Durch das "class" Dadurch, dass sich der Klassen-Operator ja innerhalb des Typs befindet, ist man natürlich schon mittendrin ^^
Wie gesagt, hatte da irgendwie nen ungutes Gefühl, als ich "MR.FValue" schrieb, deshalb wollt ich lieber mal nachfragen, nicht das ich was gravierendes falsch mach ;) |
Re: [Class Operator] Zugriff auf privates Feld des Records
Zitat:
eine "normale" Prozedur würde auch dazugehören
Delphi-Quellcode:
PS: das mit dem strict geht so?
type
TMyRecord = record private FValue: Integer; public function getValue: Integer; end; [...] function TmtgColor.getValue: Integer; begin Result := FValue; end; eigentlich dachte ich daß ein Record kein strict kennt, da ja eh keine Ableitungen möglich sind ok, es geht |
Re: [Class Operator] Zugriff auf privates Feld des Records
Zitat:
Zitat:
Wie sinnvoll das wirklich ist, kann man natürlich bestreiten. ;-) |
Re: [Class Operator] Zugriff auf privates Feld des Records
Ach, wieder falsch ausgedrückt mit dem class ^^
@ himitsu: Bisher dachte ich immer, das "strict private" würde bedeuten, dass die entsprechende Methode bzw. das entsprechende Feld wirklich nur im Typ sichtbar ist und nicht in der gesamten Unit (wie es bei einem einzelnen "private" der Fall ist). Das hat doch nichts mit Ableitungen zu tun, oder? :gruebel: (Für Abletungen wäre ja Protected zuständig, was natürlich dann auch von Delphi angekreidet wird ;)) |
Re: [Class Operator] Zugriff auf privates Feld des Records
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 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 by Thomas Breitkreuz