Einzelnen Beitrag anzeigen

Blup

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

AW: Zugriff auf Private Variable aus abgeleiteter Klasse aus fremder Unit

  Alt 15. Feb 2013, 10:33
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;
  Mit Zitat antworten Zitat