AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Objekt innerhalb Klasse nach außen hin "ReadOnly"
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt innerhalb Klasse nach außen hin "ReadOnly"

Ein Thema von Rob09 · begonnen am 10. Apr 2011 · letzter Beitrag vom 11. Apr 2011
Antwort Antwort
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#1

Objekt innerhalb Klasse nach außen hin "ReadOnly"

  Alt 10. Apr 2011, 21:43
Delphi-Version: 6
Hi!

Ich habe ein kleines Problem und würde mich sehr über etwas Hilfe freuen.

Es geht dabei um die wie folgt aufgebaute Klasse:
Code:
type
  TMyKlasse = class(TObject)
  private
    FUnterObjekt: TUnterKlasse;
    ...
  public
    ...
    property UnterObjekt: TUnterKlasse read FUnterObjekt;
  end;
So, nun mein Problem:

Die Klasse TUnterKlasse enthält properties, die man "im normalen Gebrauch" (d.h. wenn sie als "eigenständiges" Objekt instanziert wird) schreiben darf. Das muss für meine Zwecke so sein. In diesem Fall allerdings, in dem UnterObjekt eine property von TMyKlasse ist, hätte ich es gerne so, dass sich sämtliche properties von FUnterObjekt wie ReadOnly verhalten. Optimalerweise soll auch verhindert werden, dass man irgendwelche Methoden von FUnterObjekt aufrufen kann. D.h. man soll hier von FUnterObjekt eigentlich wirklich nur Eigenschaften auslesen dürfen, sonst nichts. Geht das irgendwie?

Beste Grüße!
Robert

PS (ganz andere Frage): Fallen constructor und destructor eigentlich auch unter den Oberbegriff "Methode"?
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Objekt innerhalb Klasse nach außen hin "ReadOnly"

  Alt 10. Apr 2011, 22:03
Ich glaube nicht, dass das geht, da du eigentlich nur einen Pointer auf ReadOnly gesetzt hast, denn die Property UnterObjekt enthält ja lediglich einen Zeiger auf die Klasse, die irgendwo im Speicher liegt.

Eine Idee für dein Konzept: Warum kapselst du das Objekt nicht vollständig und bietest nach außen nur Getter-Methoden (oder auch als Properties) an?
Delphi-Quellcode:
type
  TUnterKlasse = class(...)
  private
    ...
  public
    property A : String read FA write FA;
    property B : String read FB write FB;
    property C : String read FC write FC;
  end;

  TMyKlasse = class(TObject)
  private
    FUnterObjekt: TUnterKlasse;
    ...
  public
    ...
    //property UnterObjekt: TUnterKlasse read FUnterObjekt;

    // als public getter
    function GetUnterObjectA(): String;
    function GetUnterObjectB(): String;
    function GetUnterObjectC(): String;
    
   // oder als Properties, dann kannst du die Getter-Methoden
   // aber private setzen
   property UnterObjectA : String read GetUnterObjectA;
   property UnterObjectB : String read GetUnterObjectB;
   property UnterObjectC : String read GetUnterObjectC;
  end;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#3

AW: Objekt innerhalb Klasse nach außen hin "ReadOnly"

  Alt 10. Apr 2011, 22:26
Guter Denkanstoß!

Ich denke, ich werde eine THilfsKlasse einführen, die sämtliche Getter (bzw. ReadOnly-properties) und eine nicht auslesbare Referenz auf ein Objekt vom Typ TUnterKlasse (in diesem Fall FUnterObjekt) enthält. TMyKlasse bekommt dann ein FHilfsObjekt vom Typ THilfsKlasse spendiert und ich ändere die property UnterObjekt in FMyKlasse dahingehend, dass diese auf FHilfsObjekt verweist.

Ist zwar ein bisschen um die Ecke, aber sollte funktionieren...

Vielen Dank und Gruß!
Robert

Geändert von Rob09 (10. Apr 2011 um 22:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Objekt innerhalb Klasse nach außen hin "ReadOnly"

  Alt 10. Apr 2011, 22:33
Warum integrierst du es nicht direkt? Diese eine "Reader"-Klasse ist dann doch mehr oder weniger unnütz?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#5

AW: Objekt innerhalb Klasse nach außen hin "ReadOnly"

  Alt 10. Apr 2011, 22:35
Hmmm...

Wenn jetzt alerdings FUnterObjekt wiederum nicht nur Datentypen, sondern auch Objekte enthält, habe ich das gleiche Problem wieder - nur eine Ebene tiefer

nehme aber an, dass es prinzipiell keine Lösung gibt, die genau meinen Bedürfnissen entspricht... Oder?
  Mit Zitat antworten Zitat
Rob09

Registriert seit: 14. Aug 2007
58 Beiträge
 
Delphi 6 Personal
 
#6

AW: Objekt innerhalb Klasse nach außen hin "ReadOnly"

  Alt 10. Apr 2011, 22:37
Naja, falls ich weitere TMyKlasse2, TMyKlasse3, ... habe, die ebenfalls ein ReadOnly-Unterobjekt vom selben Typen haben, wäre die THilfsKlasse ja schon sinnvoll.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#7

AW: Objekt innerhalb Klasse nach außen hin "ReadOnly"

  Alt 10. Apr 2011, 23:23
Hatte nicht vermutet, dass das Problem so weitläufig ist Von daher kann so eine Reader-Klasse durchaus ihren Sinn erfüllen. Zur Not würde ich an der Stelle evtl. noch über RTTI nachdenken.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#8

AW: Objekt innerhalb Klasse nach außen hin "ReadOnly"

  Alt 10. Apr 2011, 23:37
was evtl auch noch eine Möglichkeit wäre, einfach ein Interface zu exportieren.

Hierbei kannst du genau angegeben, auf was zugreifbar ist.
  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 09:26 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