По мотивам - http://programmingmindstream.blogspot.ru/2014/01/todo-class-constructor.html
На заданный там вопрос отвечает следующий пример - https://sourceforge.net/p/rumtmarc/code-0/HEAD/tree/trunk/Blogger/DraftsAndScketches/SomeTestProjects/ClassConstructor/
Вот код:
На заданный там вопрос отвечает следующий пример - https://sourceforge.net/p/rumtmarc/code-0/HEAD/tree/trunk/Blogger/DraftsAndScketches/SomeTestProjects/ClassConstructor/
Вот код:
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
type
TA = class
strict protected
class var f_list: TList;
protected
class function CreateList: TList; virtual;
public
class constructor Create;
class function List: TList;
end;//TA
TSomeOtherList = class(TList)
end;//TSomeOtherList
TB = class(TA)
protected
class function CreateList: TList; override;
end;//TB
class function TA.List: TList;
begin
Result := f_List;
end;
class function TA.CreateList: TList;
begin
Result := TList.Create;
end;
class constructor TA.Create;
begin
inherited;
f_List := CreateList;
end;
class function TB.CreateList: TList;
begin
Result := TSomeOtherList.Create;
end;
{$R *.fmx}
procedure TForm1.FormCreate(Sender: TObject);
begin
TB.List;
TA.List;
TB.List;
end;
end.
Что мы видим?
Достаточно поставить Break-Point'ы в TA.CreateList и TB.CreateList.
И мы увидим, что в TA.CreateList мы - ПОПАДАЕМ, а в TD.CreateList - никогда НЕ ПОПАДАЕМ.
Что в общем - НЕОЖИДАННО, но - ВПОЛНЕ ОБЪЯСНИМО.
Короче... БУДЬТЕ ОСТОРОЖНЫ с "новыми языковыми фичами".
Они могут работать НЕ ТАК как вы их ТРАКТУЕТЕ.
Лучше всего - "сначала попробовать".
Комментариев нет:
Отправить комментарий