HG
Size: a a a
D
z
doSomething(TDummyAdvRec.Construct(...))
D
doSomething(TDummyAdvRec.Construct(...))
var
vRec:TDummyAdvRec;
begin
// vRec.Create(0);
vRec.X := 0;
doSomething(vRec);
end;
var vRec:TDummyAdvRec;
?VA
Scoped Enumerations
, которая как раз таки исключает неоднозначность при совпадении имен в элементах энума.z
var
vRec:TDummyAdvRec;
begin
// vRec.Create(0);
vRec.X := 0;
doSomething(vRec);
end;
var vRec:TDummyAdvRec;
?GB
Init
практически не используется в отличии от повсеместного Create
начиная с базового TObject
и вышеCreate
одинаково и создает экземпляр и (пере)инициализирует данные класса в зависимости от того, как он был вызван (у класса или инстанса)Create
лично я не использую, т.к. это не самая очевидная вещь, кмкGB
КС
BU
AW
КС
AS
z
z
GB
z
doSomething(TDummyAdvRec.Construct(...))
не придумалосьz
z
program Project1;
{$ModeSwitch advancedrecords}
type
TGeneralFontFileDesc=record
Name:string;
FontFile:string;
constructor Init(AName:string;AFontFile:string);
class function Construct(AName:string;AFontFile:string):TGeneralFontFileDesc;static;
end;
constructor TGeneralFontFileDesc.init(AName:string;AFontFile:string);
begin
Name:=AName;
FontFile:=AFontFile;
end;
class function TGeneralFontFileDesc.Construct(AName:string;AFontFile:string):TGeneralFontFileDesc;
begin
result.init(AName,AFontFile);
end;
begin
writeln(TGeneralFontFileDesc.Construct('font','c:\fonts').Name);
readln;
end.
z