AGB  ·  Datenschutz  ·  Impressum  







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

Attribute überschreiben

Ein Thema von Rainer Wolff · begonnen am 3. Aug 2015 · letzter Beitrag vom 5. Aug 2015
 
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.049 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Attribute überschreiben

  Alt 5. Aug 2015, 06:37
Grundsätzlich ist es kein gutes OOP, eine Eigenschaft mit einer konkreten Bedeutung in einer Kindklasse zu überschreiben und ihm dabei eine andere Bedeutung zu geben ('Liskov Prinzip', das 'L' in SOLID).
Das Ändern einer Caption oder einer Eigenschaft von 10 auf 30 verletzt wohl kaum das LSP.

Einfach merken, welche Eigenschaften man überschrieben hat:

Delphi-Quellcode:
program Project104;

{$APPTYPE CONSOLE}

uses
  Controls,
  Generics.Collections,
  Rtti,
  SysUtils;

type
  CheckboxAttribute = class(TCustomAttribute)
    constructor Create(const caption: string; X, Y: Integer);
  end;

constructor CheckboxAttribute.Create(const caption: string; X, Y: Integer);
begin
end;

type
  TBaseClass = class(TControl)
  private
    FEigenschaft1: Boolean;
  published
    [Checkbox('Ich bin die Beschriftung',10,10)]
    property Eigenschaft1: Boolean read FEigenschaft1 write FEigenschaft1;
  end;

  TChildclass = class(TBaseClass)
  private
    FEigenschaft2: Boolean;
  published
    [Checkbox('Now i am an english caption at different position',20,20)]
    property Eigenschaft1;
    [Checkbox('I have a second property',30,30)]
    property Eigenschaft2: Boolean read FEigenschaft2 write FEigenschaft2;
  end;

var
  props: TDictionary<string,Boolean>;
  ctx: TRttiContext;
  t: TRttiType;
  p: TRttiProperty;
  a: TCustomAttribute;
begin
  props := TDictionary<string,Boolean>.Create;
  t := ctx.GetType(TChildclass);
  for p in t.GetProperties do
  begin
    if props.ContainsKey(p.Name) then
      Continue
    else
      props.Add(p.Name,True);
    for a in p.GetAttributes do
      if a is CheckboxAttribute then
        Writeln(p.Parent.Name + ' ' + p.ToString);
  end;
  Readln;
end.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 15:45 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