AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [Class Operator] Zugriff auf privates Feld des Records
Thema durchsuchen
Ansicht
Themen-Optionen

[Class Operator] Zugriff auf privates Feld des Records

Ein Thema von Zwoetzen · begonnen am 4. Aug 2009 · letzter Beitrag vom 4. Aug 2009
Antwort Antwort
Zwoetzen

Registriert seit: 19. Sep 2007
Ort: Ilmenau
93 Beiträge
 
Delphi 2009 Professional
 
#1

[Class Operator] Zugriff auf privates Feld des Records

  Alt 4. Aug 2009, 19:53
Hi DP'ler,

diesmal hab ich eine Frage zu einem (möglichst ^^) sauberen Programmier-Stil.

Ich habe vor einigen Wochen die Klassen-Operatoren entdeckt ( ), und diese mal ausprobiert, dabei bin ich nun bei folgendem Gerüst gelandet:

Delphi-Quellcode:
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;
Mir geht es dabei um den Zugriff in der Implicit-Funktion auf das private Feld: Ist das sauber von der Programmierung her?
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: [Class Operator] Zugriff auf privates Feld des Records

  Alt 4. Aug 2009, 19:55
Der Class Operator gehört ja zum Typ, ist also nicht von "aussen"
Markus Kinzler
  Mit Zitat antworten Zitat
Zwoetzen

Registriert seit: 19. Sep 2007
Ort: Ilmenau
93 Beiträge
 
Delphi 2009 Professional
 
#3

Re: [Class Operator] Zugriff auf privates Feld des Records

  Alt 4. Aug 2009, 20:29
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: [Class Operator] Zugriff auf privates Feld des Records

  Alt 4. Aug 2009, 20:34
Zitat von Zwoetzen:
Durch das "class" ist man natürlich schon mittendrin ^^
nicht durch das Class, sondern dadurch daß diese Prozedur innerhalb des Records deklariert wurde ... sie gehört also dazu.

eine "normale" Prozedur würde auch dazugehören
Delphi-Quellcode:
type
  TMyRecord = record
  private
    FValue: Integer;
  public
    function getValue: Integer;
  end;

[...]

function TmtgColor.getValue: Integer;
begin
  Result := FValue;
end;
PS: das mit dem strict geht so?
eigentlich dachte ich daß ein Record kein strict kennt, da ja eh keine Ableitungen möglich sind

ok, es geht
$2B or not $2B
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

Re: [Class Operator] Zugriff auf privates Feld des Records

  Alt 4. Aug 2009, 20:34
Zitat von Zwoetzen:
Stimmt, da hast du auch wieder recht. Durch das "class" ist man natürlich schon mittendrin ^^
Nö, das sagt einfach nur, dass es auf den Typen angewandt wird, nicht auf eine spezielle Instanz.
Zitat:
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
Dein Operator wird ja immer etwas neues zurückgeben. Will heißen, du kannst dadurch ja nicht in einer bestehenden Record-Instanz etwas ändern.

Wie sinnvoll das wirklich ist, kann man natürlich bestreiten.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Zwoetzen

Registriert seit: 19. Sep 2007
Ort: Ilmenau
93 Beiträge
 
Delphi 2009 Professional
 
#6

Re: [Class Operator] Zugriff auf privates Feld des Records

  Alt 4. Aug 2009, 20:40
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?
(Für Abletungen wäre ja Protected zuständig, was natürlich dann auch von Delphi angekreidet wird )
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: [Class Operator] Zugriff auf privates Feld des Records

  Alt 4. Aug 2009, 20:42
Zitat von Zwoetzen:
(Für Abletungen wäre ja Protected zuständig, was natürlich dann auch von Delphi angekreidet wird )
ja, ich war wohl irgendwie grad wo anders ... hatte es aber selber auch eben gemerkt
$2B or not $2B
  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 21:20 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