Die Abschnitte public und published definieren die Schnittstelle für den Entwickler, der eine Komponente verwenden möchte. Der protected Abschnitt erweitert diese Schnittstelle für Entwickler, die von diese Klasse ableiten wollen. Eigentlich sollten auch spätere Versionen dieser Klasse immer mindestens die einmal veröffentlichten Properties und Methoden unterstützen.
Wenn der Entwickler es für notwendig hält, kann sich im Abschnitt private dagegen von Version zu Version alles ändern.
Im Prinzip ist ein Hack für den Zugriff auf private Felder immer nur für die Versionen gültig, für die er auch erstellt wurde. Eine Garantie für zukünftige Versionen kann es nicht geben.
Auf bekannte Änderungen in bestimmten Versionen kann man aber mit bedingter Kompillierung reagieren.
Delphi-Quellcode:
interface
uses
Graphics;
type
TMyIcon = class(TIcon)
private
function GetImage: TIconImage;
procedure SetImage(Value: TIconImage);
public
property Image: TIconImage read GetImage write SetImage;
end;
implementation
uses
Types;
type
THackIcon = class(TGraphic) // Ableitung von der selben Klasse wie TIcon
public
{$IFDEF VER180}
// hier Felder die nur in dieser Version definiert sind
{$ENDIF}
FImage: TIconImage; // Felder in der selben Reihenfolge, Typ, Anzahl
FRequestedSize: TPoint;
end;
function TMyIcon.GetImage: TIconImage;
begin
Result := THackIcon(Self).FImage;
end;
procedure TMyIcon.SetImage(Value: TIconImage);
begin
THackIcon(Self).FImage := Value;
end;