uses System;
uses System.Collections.Generic;
type
TPerson = auto record class
Name: string;
Age: integer;
end;
begin
end.
auto record класс TPerson развернётся в:
uses System;
uses System.Collections.Generic;
type
TPerson = class(ICloneable, IEquatable<TPerson>)
public
auto property Name: string;
auto property Age: integer;
constructor(name: string; age: integer);
begin
self.Name := name;
self.Age := age;
end;
function Clone(): object := new TPerson(Name, Age);
function Equals(other: TPerson) := (Name = other.Name) and (Age = other.Age);
end;
begin
end.
Что это даёт:
Автоматическая генерация автосвойств с указанными именами.
Автоматическая реализация интерфейсов ICloneable и IEquatable<T>.
Автоклассы ничего из этого не дают. Можно также запретить описывать что-либо кроме полей, связанных с автосвойствами в таких классах. Что-то подобное планируют (Records) сделать и в C#.
Я уже сейчас не помню. Пусть повисит - буду вспоминать.
Надо посмотреть, во что разворачивается код Record classes в новом C#. И взять оттуда полезное для наших автоклассов и автозаписей.
Мне не нравится вообще инициализировать записи вызовом конструктора - это неестественно поскольку память при этом не выделяется. Если я когда-то буду писать желаемые правила организации кода на PascalABC.NET, я обязательно это отмечу. Кроме того, такой вызов неэффективен: функция, возвращающая запись на стеке, жрёт память и время работы.
Рассматривался вариант метода Init т.к.запись уже создана в памяти, но как-то не сложилось.
Только сейчас обратил внимание, что мы говорим о разном. Вы говорите про аналог Record Classes в C#.
Ну, это совершенно новая конструкция. Её синтаксис пока никак не лёг. Ваш - неудачный. Record classes надо делать с таким синтаксисом чтобы ничем нельзя было их дополнить.
С другой стороны, нетрудно расширить автоклассы до указываемого вами поведения.
type
Sword = recordclass(Damage, Durability: integer);
Можно так, например. @Admin, как Вам? Точнее, чтобы автосвойства объявлялись с тем же примерно синтаксисом, что и параметры подпрограмм и методов. Можно сделать, чтобы эта запись разворачивалась в автокласс, реализующий ICloneable и IEquatable<T>. То есть, если хватает этой однострочной записи - используем, если надо больше функционала - автоклассы.