AGB  ·  Datenschutz  ·  Impressum  







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

Property für Anwender READONLY, intern nicht

Ein Thema von scrat1979 · begonnen am 15. Sep 2018 · letzter Beitrag vom 17. Sep 2018
 
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.029 Beiträge
 
Delphi 10.4 Sydney
 
#1

Property für Anwender READONLY, intern nicht

  Alt 15. Sep 2018, 12:17
Hallo zusammen,

ich habe gerade ein Problem bezüglich meiner selbst entwickelten Komponente. Die wichtigsten Klassen-Eigenschaften und -Methoden findet ihr anschließend. Zusammengefasst handelt es sich um einen TCP-Server mit einer Userliste. Der TCP-Server (Komponente) muss INTERN einige Dinge in der User-Klasse zuweisen (z.B. LastLogin). Auf der anderen Seite soll der Benutzer der Komponente "von außen" auf die UserListe zugreifen können. Hier soll jedoch eine Veränderung der Eigenschaften NICHT möglich sein. Um beim genannten Beispiel zu bleiben soll es also von außen NICHT möglich sein, die Property LastLogin zu schreiben sondern ausschließlich zu lesen.

Meine Lösungsidee: Ich erzeuge im Getter eine "ReadOnly"-Version der entsprechenden TExtCientInfo und gebe diese dann über den Getter zurück. Dazu würde ich eine neue private Variable im Server (z.B. FReadOnlyClientInfo) erstellen und diese im Getter entsprechend bestücken und zurückgeben. Diesbezüglich wäre es vielleicht interessant zu wissen, dass auf diese Variable immer nur EIN Lesezugriff gleichzeitig erfolgen wird - mehrere Threads kommen sich dabei definitv nicht in die Quere. Ist dieser Ansatz korrekt?

Anbei ein Auszug aus dem Klassendesign. Sollte noch was fehlen werde ich das natürlich nachreichen.

TCP-Server:

Delphi-Quellcode:
type TMyTCPServer = class(TComponent)
private
 function FGetClient(Idx : Integer) : TExtClientInfo; // Hier müsste eine ReadOnly-Version von TExtClientInfo zurückgegeben werden!
 [...]
public
 [...]
 property Clients[Idx : Integer] : TExtClientInfo read FGetClient;
 [...]
end;

[...]

function TMyTCPServer.FGetclient(Idx : Integer) : TExtClientInfo;
begin
 Result := FClientList[Idx];
end;
Auszug aus TExtClientInfo

Delphi-Quellcode:
type TExtClientInfo = class(TBasicClientInfo)
  private

  [...]

  public
    [...]
    // Die Basisinfos (ClientName, ID etc. finden sich in der Basisklasse)
    
    property Active : Boolean read FActive;

    // Die Properties müssen nach außen hin read-only sein...
    property LastPing : TDateTime read FLastPing write FSetLastPing;
    property LastLogin : TDateTime read FLastLogin write FSetLastLogin;
    property GUID : String read FGUID write FSetGUID;
    property LastActivity : TDateTime read FLastActivity write FSetLastActivity;
    [...]
end;
Besten Dank für Eure Mühe mir zu helfen,
Michael Kübler
  Mit Zitat antworten Zitat
 


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 01:32 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