- Unit1:
- Код: Выделить всё
Unit Unit1;
Interface
Type
Generic TFirstGeneric<T> = Class
Private
fField: Integer;
Public
Constructor Create;
End;
Implementation
Constructor TFirstGeneric.Create;
Begin
fField := 100;
End;
End.
- Unit2:
- Код: Выделить всё
Unit Unit2;
Interface
Uses
Unit1;
Type
Generic TSecondGeneric<T, U> = Class
Private
fFirst: U;
fField: Integer;
Public
Property Field: Integer Read fField;
Constructor Create;
End;
Implementation
Constructor TSecondGeneric.Create;
Begin
fFirst := U.Create;
fField := fFirst.fField + 1;
End;
End.
- Project1:
- Код: Выделить всё
program Project1;
uses
Unit1, Unit2;
Type TBlank = Specialize TFirstGeneric<TObject>;
Type TSample = Specialize TSecondGeneric<TObject, TBlank>;
Var
aSample: TSample;
begin
aSample := TSample.Create;
WriteLn(aSample.Field); // 101
end.
В Unit2 идёт обращение к приватному полю класса TBlank, компилятор с этим согласен, да и работает программа адекватно. Это документированная фича?