Хотелось бы иметь в Delphi for Win32 методы, объявляемые как class constructor, т.е. выполняющую некоторую инициализацию для класса в целом, а не для его экземпляров. И чтобы их код гарантировано выполнялся при старте приложения (подобно секции initialization юнита). И чтобы потомки класса наследовали конструкторы класса предка, а при желании - могли переопределить его поведение. Зачем это нужно? Скажем, у меня есть классы с общим предком, которые я должен регистрировать с помощью RegisterClass. Мне приходится помнить об этом и прописывать код регистрации руками для каждого класса в секции инициализации юнита. А если бы была описанная выше возможность, я мог бы в коде классового конструктора базового класса написать
RegisterClass(Self);
и просто объявлять от класса потомков - они бы регистрировались автоматически. Можно было бы регистрировать даже более сложным образом:
RegisterClassAlias(Self, GetClassAlias);
где GetClassAlias - виртуальный классовый метод. Эх, мечты-мечты...
Subscribe to:
Post Comments (Atom)
3 comments:
С аналогичной проблеммой столкнулся в этом году, когда писал модуль для сериализации.
При подъеме класса с ресурса приходиться соблюдать порядок выполнения конструкторов подклассов, а также собсна знать адреса и параметры этих конструкторов...
пробовали c:=GetClass('TFont').Create; ?))
выполнится не TFont.Create а TObject.Create - в результате непроинициализированными остаются поля TFont....
Если у Вас уже есть ответ на этот вопрос, прошу помочь ;)
trojanhost@mail.ru
function TBase.New: Pointer;
begin
Self:=Pointer(Self.ClassType.Create);
Result:=Create;
end;
или
class function TBase.New: Pointer;
begin
Result:=Create;
end;
TBase = class
constructor Create; virtual;
TChild = class
constructor Create; override;
Post a Comment