1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
unit ugenfunc7;
{$mode objfpc}
interface
type
TTest = class
constructor Create;
generic function Add<T>(aLeft, aRight: T): T;
generic class function AddClass<T>(aLeft, aRight: T): T;
generic function GetPrivate<T>: T;
generic function GetProtected<T>: T;
generic function GetStrictPrivate<T>: T;
generic function GetStrictProtected<T>: T;
strict private
fStrictPrivate: LongInt;
private
fPrivate: LongInt;
strict protected
fStrictProtected: LongInt;
protected
fProtected: LongInt;
end;
generic function Add<T>(aLeft, aRight: T): T;
implementation
constructor TTest.Create;
begin
fStrictPrivate := 1;
fPrivate := 2;
fStrictProtected := 3;
fProtected := 4;
end;
generic function TTest.Add<T>(aLeft, aRight: T): T;
begin
Result := aLeft + aRight;
end;
generic class function TTest.AddClass<T>(aLeft, aRight: T): T;
begin
Result := aLeft + aRight;
end;
generic function TTest.GetStrictPrivate<T>: T;
begin
Result := fStrictPrivate;
end;
generic function TTest.GetPrivate<T>: T;
begin
Result := fPrivate;
end;
generic function TTest.GetStrictProtected<T>: T;
begin
Result := fStrictProtected;
end;
generic function TTest.GetProtected<T>: T;
begin
Result := fProtected;
end;
generic function Add<T>(aLeft, aRight: T): T;
begin
Result := aLeft + aRight;
end;
end.
|