AGB  ·  Datenschutz  ·  Impressum  







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

Readonly interface erzeugen (MMX?)

Ein Thema von freimatz · begonnen am 5. Jan 2022 · letzter Beitrag vom 5. Jan 2022
Antwort Antwort
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.490 Beiträge
 
Delphi 12 Athens
 
#1

AW: Readonly interface erzeugen (MMX?)

  Alt 5. Jan 2022, 13:31
Delphi-Quellcode:
type
  IReadOnlyData = interface
    ['{7F08C18E-0E6A-40F1-9DD9-AFDDA473FB8B}']
    function GetActualValue(const p_Component: Byte): double;

    property ActualValue[const p_Component: Byte]: double read GetActualValue;
  end;
 
 IData = interface(IReadOnlyData)
    ['{E9154DD9-A28E-4703-9DD8-5181A27869E2}']
    procedure SetActualValue(const p_Component: Byte; const p_Value : double);

    property ActualValue[const p_Component: Byte]: double read GetActualValue write SetActualValue;
  end;
In diesem Fall kann man durch Vererbung nur die Declaration der Getter sparen.
Wenn ein Object IData unterstützt, sollte auch immer IReadOnlyData mit angegeben werden.
Sonst wird IReadOnlyData bei der direkten Abfrage nicht gefunden.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.002 Beiträge
 
Delphi 12 Athens
 
#2

AW: Readonly interface erzeugen (MMX?)

  Alt 5. Jan 2022, 14:05
Ich würde das viel einfacher machen:
Delphi-Quellcode:
type
  IData = interface
    ['{E9154DD9-A28E-4703-9DD8-5181A27869E2}']
    procedure SetActualValue(const p_Component: Byte; const p_Value : double);
    procedure SetCurrentActual(const p_Value: IActualValue);
    procedure SetDefaultBehaviourMode(const p_Value: String);
  end;

  IReadOnlyData = interface
    ['{7F08C18E-0E6A-40F1-9DD9-AFDDA473FB8B}']
    function GetActualValue(const p_Component: Byte): double;
    function GetCurrentActual(): IActualValue;
    function GetDefaultBehaviourMode(): String;
    property DefaultBehaviourMode: String read GetDefaultBehaviourMode;
    property CurrentActual: IActualValue read GetCurrentActual;
    property ActualValue[const p_Component: Byte]: double read GetActualValue;
  end;
Wer sich zum Schreiben extra das entsprechende Interface holen kann, kann auch einfach die Setter verwenden. Dann sieht man auch direkt, dass da geschrieben wird. Dann gibt es auch keine doppelten Deklarationen der Properties usw. und da die Properties in Interfaces auch nur syntaktischer Zucker sind, muss man die noch nicht einmal in der implementierenden Klasse deklarieren.

Dadurch ist der Anpassungsaufwand relativ niedrig.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.195 Beiträge
 
Delphi 12 Athens
 
#3

AW: Readonly interface erzeugen (MMX?)

  Alt 5. Jan 2022, 14:24
Delphi-Quellcode:
type
  IReadOnlyData = interface
    ['{7F08C18E-0E6A-40F1-9DD9-AFDDA473FB8B}']
    function GetActualValue(const p_Component: Byte): double;
    function GetCurrentActual(): IActualValue;
    function GetDefaultBehaviourMode(): String;
    property DefaultBehaviourMode: String read GetDefaultBehaviourMode;
    property CurrentActual: IActualValue read GetCurrentActual;
    property ActualValue[const p_Component: Byte]: double read GetActualValue;

  IData = interface( IReadOnlyData )
    ['{E9154DD9-A28E-4703-9DD8-5181A27869E2}']
    procedure SetActualValue(const p_Component: Byte; const p_Value : double);
    procedure SetCurrentActual(const p_Value: IActualValue);
    procedure SetDefaultBehaviourMode(const p_Value: String);

    property DefaultBehaviourMode: String read GetDefaultBehaviourMode write SetDefaultBehaviourMode;
    property CurrentActual: IActualValue read GetCurrentActual write SetCurrentActual;
    property ActualValue[const p_Component: Byte]: double read GetActualValue write SetActualValue;

  end;
Wäre das noch eine Alternative, mit Ableitung der Interfaces ?
Sonst ist das IData nur um Schreiben, das wäre nicht so ideal, allerdings sind abgeleitete interfaces auch nicht so toll.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.702 Beiträge
 
Delphi 12 Athens
 
#4

AW: Readonly interface erzeugen (MMX?)

  Alt 5. Jan 2022, 15:04
Ich würde das viel einfacher machen:
Delphi-Quellcode:
type
  IData = interface
    ['{E9154DD9-A28E-4703-9DD8-5181A27869E2}']
    procedure SetActualValue(const p_Component: Byte; const p_Value : double);
    procedure SetCurrentActual(const p_Value: IActualValue);
    procedure SetDefaultBehaviourMode(const p_Value: String);
  end;
Hier würde ich es als Nachteil empfinden, dass ich immer mit zwei Interfaces arbeiten muss, während ich im Original und bei dem inherited Ansatz immer mit einem auskomme: entweder IReadOnlyData für nur Lesen oder IData für Lesen und Schreiben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 04:58 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-2025 by Thomas Breitkreuz