xxxxxxxxxx
IInterfaceComponentReference = interface
['{E28B1858-EC86-4559-8FCD-6B4F824151ED}']
function GetComponent: TComponent;
end;
xxxxxxxxxx
type
IChecker<T> = interface
function Check(const Instance: T): Boolean;
end;
xxxxxxxxxx
unit UseDemo;
interface
uses GenChecks;
type
TDemo<T> = class
private
FChecker: IChecker<T>;
public
constructor Create(AChecker: IChecker<T>);
procedure Check(AValue: T);
end;
implementation
{ TDemo<T> }
procedure TDemo<T>.Check(AValue: T);
begin
if FChecker.Check(AValue)
then Writeln('Passed')
else Writeln('Stopped')
end;
constructor TDemo<T>.Create(AChecker: IChecker<T>);
begin
FChecker:= AChecker;
end;
end.
xxxxxxxxxx
type
TChecker<T> = class(TInterfacedObject, IChecker<T>)
function Check(const Instance: T): Boolean;
end;