AGB  ·  Datenschutz  ·  Impressum  







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

Verdeckte Eigenschaften verwenden

Ein Thema von Incocnito · begonnen am 6. Apr 2020 · letzter Beitrag vom 6. Apr 2020
Antwort Antwort
Incocnito

Registriert seit: 28. Nov 2016
229 Beiträge
 
#1

Verdeckte Eigenschaften verwenden

  Alt 6. Apr 2020, 13:50
Hallo Leute,

ich steht gerade auf dem Schlauch.
Ich will auf die verdeckte Eigenschaft zugreifen komme aber nicht drauf, wie das geht.

Theoretisches Beispiel:
Delphi-Quellcode:
type
  TMyClass = class(TSomeSystemClass)
  private
    Function GetSomeVal() : Boolean;
    Procedure SetSomeVal(const Value : Boolean);
  public
    SomeVal : Boolean read GetSomeVal write SetSomeVal;
  end;
  
...

Function TMyClass.GetSomeVal() : Boolean;
Begin
  Result := inherited.SomeVal; // <- Geht so nicht
  DoSomeThingMore_1();
End;

Procedure TMyClass.SetSomeVal(const Value : Boolean);
Begin
  inherited.SomeVal := Value; // <- Geht so nicht
  DoSomeThingMore_2();
End;
Ich dachte ich könnte einfach mit Inherited darauf zugreifen,
aber das ist wohl nur für den aktuellen Kontext gedacht.

Weiß jemand, wie ich die Verwendung von "SomeVal" aus der Klasse
TSomeSystemClass "verhindern" kann, so dass es nur in Verbindung
mit der Prozedur "DoSomeThingMore_X()" läuft.

Die zugrundeliegende Klasse kann/will ich ja nicht ändern.

Mit freundlichem Gruß
Incocnito
  Mit Zitat antworten Zitat
Alt 6. Apr 2020, 14:19     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Incocnito

Registriert seit: 28. Nov 2016
229 Beiträge
 
#3

AW: Verdeckte Eigenschaften verwenden

  Alt 6. Apr 2020, 14:44
Hi Frühlingsrolle!

Vielen Dank für die Hilfe.
Ironischerweise war das Lesen deines Beispiels die Hilfe zur Lösung,
auch wenn Sie nicht die eigendliche Lösung war.
Mein Fehler war einfach nur der Punkt zwischen "inherited" und "SomeVal"
in meiner "GetSomeVal"- und meiner "SetSomeVal"-Methode.
Ohne den Punkt macht er nun genau das was er soll!

Mit freundlichem Gruß
Incocnito
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Verdeckte Eigenschaften verwenden

  Alt 6. Apr 2020, 14:46
Grade das ist der Sinn von private . Statt private solltest du dann protected nehmen, wenn abgeleitete Klassen das verwenden können sollen.

Und die Getter/Setter-Methoden kannst du bewusst noch virtual machen, wenn abgeleitete Klassen sie auch überschreiben können sollen.
  Mit Zitat antworten Zitat
Alt 6. Apr 2020, 15:05     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#6

AW: Verdeckte Eigenschaften verwenden

  Alt 6. Apr 2020, 15:10
Hier sollte das Beispiel dennoch funktionieren, weil die Klassen in ein und derselben Unit gegeben sind.
Aber auch nur, solange die Methoden als private und nicht als strict private deklariert wurden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
229 Beiträge
 
#7

AW: Verdeckte Eigenschaften verwenden

  Alt 6. Apr 2020, 17:22
Grade das ist der Sinn von private . Statt private solltest du dann protected nehmen, wenn abgeleitete Klassen das verwenden können sollen.

Und die Getter/Setter-Methoden kannst du bewusst noch virtual machen, wenn abgeleitete Klassen sie auch überschreiben können sollen.
Die ableitende Klasse ist von mir. Die abgeleitete Klasse (Basisklasse) ist unveränderbar.
In der Basisklasse ist das Feld public.
Wenn meine Klasse verwendet wird, sollen die Zehntausend anderen Methoden/Eigenschaften/...
genau so verwendet werden, aber wenn einer "SomeVal" ausließt oder ändert, soll immer auch noch was gemacht werden.
Ob jemand meine Klasse ableiten will ist mir dann im Zweifelsfall erstmal egal.

Hab' ich meine Ausgangsfrage echt so missverständlich geschrieben?

Wie gesagt, ich hatte nach "inherited" einen Punkt gemacht und mich gewundert,
was ich denn wohl falsch mache. Das war schon der ganze Fehler.

Liebe Grüße aus dem hohen Norden
Inocncito
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Verdeckte Eigenschaften verwenden

  Alt 6. Apr 2020, 17:31
Problemchen bei dieser Art des Überschreibens.

Wenn jemand als Variable TSomeSystemClass verwendet, dann greift er auf das Original zu, da deine Überdeckung nicht bekannt ist.
Die fehlerunanfällige Lösung wäre es, wenn Getter und Setter virtual sind und direkt überschrieben werden können.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
229 Beiträge
 
#9

AW: Verdeckte Eigenschaften verwenden

  Alt 6. Apr 2020, 17:43
Problemchen bei dieser Art des Überschreibens.

Wenn jemand als Variable TSomeSystemClass verwendet, dann greift er auf das Original zu, da deine Überdeckung nicht bekannt ist.
Die fehlerunanfällige Lösung wäre es, wenn Getter und Setter virtual sind und direkt überschrieben werden können.
Das ist mir zu hoch.
Wenn jemand direkt auf "TSomeSystemClass" zugreift (davon ein Objekt erstellt und damit arbeitet),
kann ich doch eh nichts mehr machen. Oder wie jetzt?

[Edit:]
Oder meinst du
Delphi-Quellcode:
...
var test : TSomeSystemClass;
begin
  test := TMyClass.Create();
  ...
[/Edit]

Liebe Grüße
Incocnito

Geändert von Incocnito ( 6. Apr 2020 um 17:45 Uhr)
  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 05:43 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