По мотивам - 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/
Комментариев нет:
Отправить комментарий