Hi,
Ik heb bijv. een interface met propertys. In de interface is het verplicht dan de getters en de setters te declareren.
Code:
type
IMyObject = interface(IInterface)
['{E4411BCD-5212-40A0-81D4-D4A7027909FF}']
function GetName: string;
function GetWinCtrl: TWinControl;
function GetIsValid: boolean;
procedure SetName( const AValue: string );
procedure SetWinCtrl( const AValue: TWinControl );
procedure SetIsValid( const AValue: boolean );
property Name: string read GetName write SetName;
property WinCtrl: TWinControl read GetWinCtrl write SetWinCtrl;
property IsValid: boolean read GetIsValid write SetIsValid;
end;
implementation
end.
De class met deze interface implementeert de getters en setters in het strict private of strict protected gedeelte:
Code:
type
TMyObject = class( TInterfacedObject, IMyObject )
strict protected
FName: string;
FWinCtrl: TWinControl;
FIsValid: boolean;
strict protected
function GetName: string;
function GetWinCtrl: TWinControl;
function GetIsValid: boolean;
procedure SetName( const AValue: string );
procedure SetWinCtrl( const AValue: TWinControl );
procedure SetIsValid( const AValue: boolean );
public
constructor Create( AwinControl: TWinControl );
destructor Destroy; override;
property Name: string read GetName write SetName;
property WinCtrl: TWinControl read GetWinCtrl write SetWinCtrl;
property IsValid: boolean read GetIsValid write SetIsValid;
end;
Bij het gebruik van deze class definieer ik deze als interface i.v.m. reference counting.
Code:
procedure TFormTest.SetMyObjectIsValid( ADict: TDictionary<string, IMyObject>; AWinControl: TWinControl; ABoolean: boolean );
var
LMyObj: IMyObject; // als interface
begin
LMyObj := TMyObject.Create( AWinControl );
LMyObj.IsValid := ABoolean;
..
end;
Code completion bied de 3 property's aan + de 3 standaard functies inzake interfaces.
Maar dit kan ook :
Code:
LMyObj.SetIsValid( ABoolean );
Ik wil niet de fout maken dat deze laatste code gebruikt wordt. Hoe kan ik voorkomen dat de setters en getters direct benaderbaar zijn ? Dat komt natuurlijk door de scope in de interface, daar kun je die niet private, protected of public zetten. Hoe gaan jullie daar mee om ? Geen propertys in interfaces ?
Bookmarks