Анонимные классы

Иногда необходимо сгенерировать объект класса на лету, не описывая класс. У такого класса нет имени (он анонимный), но известен набор полей.

Объект анонимного класса создаётся следующим образом:

var p := new class(Name := 'Иванов', Age := 20);
Println(p.Name,p.Age);

У объекта p автоматически генерируются публичные поля Name и Age соответствующих типов.

Два объекта принадлежат к одному анонимному классу если они имеют одинаковый набор полей, и эти поля принадлежат к одинаковым типам. Например:

var p1 := new class(Name := 'Петров', Age := 21);
p1 := p;

Если поля безымянного класса инициализируются переменными, то имена полей можно не писать - они генерируются автоматически и их имена и типы совпадают с именами и типами переменных. Например:

var Name := 'Попова';
var
Age := 23;
var
p := new class(Name, Age);
Println(p.Name,p.Age);

Поля безымянного класса можно также инициализировать переменной с составным именем, имеющим точечную нотацию. В этом случае в качестве имен полей берутся последние имена в точечной нотации. Например:

var d := new DateTime(2015,5,15);
var p := new class(d.Day, d.Month, d.Year);
Println(p.Day, p.Month, p.Year);
Println(p);