По мотивам - http://programmingmindstream.blogspot.ru/2014/01/class-constructor-2.html
И даже если сделать так:
То мы получим "неожиданные результаты".
TB.Create - наконец ТАКИ - ВЫЗОВЕТСЯ, а вот inherited из него - НЕТ.
А если написать так:
То мы получим ошибку компиляции.
Наиболее интересующиеся читатели - могут сами попробовать.
Что сказать? "НЕОЖИДАННО"! Но ВПОЛНЕ ОБЪЯСНИМО.
Ну и конечно код примера доступен тут - https://sourceforge.net/p/rumtmarc/code-0/HEAD/tree/trunk/Blogger/DraftsAndScketches/SomeTestProjects/ClassConstructor2/
И даже если сделать так:
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,
FMX.Layouts, FMX.Memo;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormShow(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)
strict protected
class var f_Fake: Integer;
protected
class function CreateList: TList; override;
public
class constructor Create;
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 constructor TB.Create;
begin
inherited;
f_Fake := 1000;
end;
class function TB.CreateList: TList;
begin
Result := TSomeOtherList.Create;
end;
{$R *.fmx}
procedure TForm1.FormShow(Sender: TObject);
begin
TB.List;
TA.List;
TB.List;
end;
end.
То мы получим "неожиданные результаты".
TB.Create - наконец ТАКИ - ВЫЗОВЕТСЯ, а вот inherited из него - НЕТ.
А если написать так:
class constructor TB.Create; begin inherited Create; f_Fake := 1000; end;
То мы получим ошибку компиляции.
Наиболее интересующиеся читатели - могут сами попробовать.
Что сказать? "НЕОЖИДАННО"! Но ВПОЛНЕ ОБЪЯСНИМО.
Ну и конечно код примера доступен тут - https://sourceforge.net/p/rumtmarc/code-0/HEAD/tree/trunk/Blogger/DraftsAndScketches/SomeTestProjects/ClassConstructor2/
Комментариев нет:
Отправить комментарий