Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
Delphi 10.1 Berlin Enterprise
|
AW: Attribute überschreiben
5. Aug 2015, 07: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.
|
|
Zitat
|