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