Это действительно должен быть комментарий, но код не выглядит нормально в комментариях.
В вашем коде есть несколько странностей:
destructor TWindow.Destroy;
begin
ClassName := '';
Text := '';
Children.Free;
end;
Нет необходимости очищатьстрок в деструкторе, но вам нужно вызвать унаследованный Destroy.
Измените его на:
destructor TWindow.Destroy;
begin
Children.Free;
inherited Destroy;
end;
TWindow наследуется от TObject, поэтому в этом коде это не имеет значения, но если вы измените наследованиеваш код сломается, поэтому никогда не опускайте inherited
в destructor
.
В конструкторе вам нужно вызвать унаследованный конструктор:
Изменить это:
constructor TWindow.Create(Wnd: HWND);
begin
Handle := Wnd;
if Handle = 0 then Exit;
ClassName := GetClassName(Handle);
Text := GetHandleText(Handle);
Node := Nil;
Children := TObjectList<TWindow>.Create(True);
end;
На это:
constructor TWindow.Create(Wnd: HWND);
begin
inherited Create;
Handle := Wnd;
if Handle = 0 then Exit;
ClassName := GetClassName(Handle);
Text := GetHandleText(Handle);
Children := TObjectList<TWindow>.Create(True);
end;
Поскольку TWindow наследуетот TObject, не имеет значения, что вы опустите здесь inherited Create
, но если вы решите изменить код и наследовать от чего-то другого, ваш конструктор сломается.
Нет необходимости устанавливать что-либо на 0
, nil
или ''
в конструкторе, все члены класса автоматически устанавливаются на 0 перед вызовом create.
Наконец, примечание о стиле
Ваш стиль капитализации слишком сложен для чтения и отвлекает от проблемы.
Кроме того, ваши отступы являются непостоянными и необычными.программа.Люди, которые часто используют его для сканирования структуры программы, сильно отвлекаются на необычные отступы.
То же самое с ключевыми словами.В моем коде я знаю, что зарезервированные слова всегда начинаются со строчной буквы, а имена, которые я дал переменным, а подпрограммы всегда начинаются с заглавной буквы.
Это позволяет мне быстро просматривать структуру программы.Зарезервированные слова Разрывает поток сканирования (как при чтении предыдущего предложения) и по этой причине не рекомендуется.
Специально для людей, страдающих аллергией на небрежные отступы и заглавные буквы. Зарезервированные слова.
См .: http://en.wikipedia.org/wiki/Indent_style
Я бы порекомендовалиспользуя тот же стиль, который используется в источнике VCL.Это не мой личный фаворит, но это чистый стиль, которым пользуются многие люди.
Стив МакКоннель: его превосходная книга code complete
обозначает страницы с 399 по 452 для макета и стиля, делаяэто самая большая глава книги.