N
Size: a a a
N
VA
TTest1
мы говорим о том, что параметры будут являться наследниками TTest1
и соо-но в коде можем использовать только
методы и свойства TTest1
. ожидать, что внутри обобщённого класса можно будет использовать другие методы из классов наследников абсолютно неправильно (а ведь по факту TTest2.Test
- это абсолютно другой метод и не имеет ничего общего с одноименным методом из TTest1
). TTest2.OtherTest
мы же не сможем его вызывать из обобщённого кода, тк такой метод отсутствует в базовом классе.GB
TTest1
мы говорим о том, что параметры будут являться наследниками TTest1
и соо-но в коде можем использовать только
методы и свойства TTest1
. ожидать, что внутри обобщённого класса можно будет использовать другие методы из классов наследников абсолютно неправильно (а ведь по факту TTest2.Test
- это абсолютно другой метод и не имеет ничего общего с одноименным методом из TTest1
). TTest2.OtherTest
мы же не сможем его вызывать из обобщённого кода, тк такой метод отсутствует в базовом классе.AS
N
VA
type
TTest1 = class
procedure Test();
end;
TTest2 = class(TTest1)
procedure OtherTest();
end;
TTest<T: TTest1, constructor> = class(TObject)
FTest: T;
procedure TestIt();
end;
procedure TTest1.Test();
begin
WriteLn('1');
end;
procedure TTest2.OtherTest();
begin
WriteLn('2');
end;
procedure TTest<T>.TestIt();
begin
FTest := T.Create();
FTest.OtherTest();
readln;
end;
begin
with TTest<TTest2>.Create do
TestIt();
end.
GB
TTest1
мы говорим о том, что параметры будут являться наследниками TTest1
и соо-но в коде можем использовать только
методы и свойства TTest1
. ожидать, что внутри обобщённого класса можно будет использовать другие методы из классов наследников абсолютно неправильно (а ведь по факту TTest2.Test
- это абсолютно другой метод и не имеет ничего общего с одноименным методом из TTest1
). TTest2.OtherTest
мы же не сможем его вызывать из обобщённого кода, тк такой метод отсутствует в базовом классе.GB
type
TTest1 = class
procedure Test();
end;
TTest2 = class(TTest1)
procedure OtherTest();
end;
TTest<T: TTest1, constructor> = class(TObject)
FTest: T;
procedure TestIt();
end;
procedure TTest1.Test();
begin
WriteLn('1');
end;
procedure TTest2.OtherTest();
begin
WriteLn('2');
end;
procedure TTest<T>.TestIt();
begin
FTest := T.Create();
FTest.OtherTest();
readln;
end;
begin
with TTest<TTest2>.Create do
TestIt();
end.
VA
GB
GB
VA
GB
VA
GB
GB
VA
VA
GB
VA