У меня нет опыта с ksh, но я использовал и удар и zsh. Я предпочитаю zsh по удару из-за его поддержки очень мощного файла globbing, переменных модификаторов расширения и более быстрого заполнения клавишей Tab.
Вот быстрое введение: http://friedcpu.wordpress.com/2007/07/24/zsh-the-last-shell-youll-ever-need/
Попробуйте добавить повторно ввести
перед второй перегрузкой
, например это:
TfrmEndoscopistSearch = class(TForm)
public
/// original constructor kept for compatibility
constructor Create(AOwner : TComponent); overload; override;
/// additional constructor allows for a caller-defined base data set
constructor Create(AOwner : TComponent; ADataSet : TDataSet; ACaption : string = ''); reintroduce; overload;
end;
Это компилируется в Turbo Delphi. Мне нужен был public
, чтобы он скомпилировался, потому что перегрузка опубликованных
методов ограничена.
Есть действительно простой способ избежать этого. Дайте вашему новому конструктору другое имя. В отличие от некоторых других популярных языков, Delphi имеет именованные конструкторы ; вам не обязательно называть их Create. Вы можете вызвать новый CreateWithDataset и вообще не мешать виртуальному конструктору Create.
TfrmEndoscopistSearch = class(TForm)
/// original constructor kept for compatibility
constructor Create(AOwner: TComponent); override;
/// additional constructor allows for a caller-defined base data set
constructor CreateWithDataset(AOwner: TComponent; ADataSet: TDataSet; ACaption: string = '');
end;
Фактически, если вы не создаете экземпляр этого класса полиморфно, вам даже не понадобится исходный конструктор. Вы можете объявить свой новый следующим образом:
TfrmEndoscopistSearch = class(TForm)
/// additional constructor allows for a caller-defined base data set
constructor Create(AOwner: TComponent; ADataSet: TDataSet; ACaption: string = ''); reintroduce;
end;
Попытка вызвать конструктор с одним аргументом непосредственно в TfrmEndoscopistSearch приведет к ошибке компиляции.
(Создание его полиморфно обычно требует использования Application.CreateForm:
Application.CreateForm(TfrmEndoscopistSearch, frmEndoscopistSearch);
Это всегда вызывает виртуальный конструктор с одним аргументом, представленный в TComponent. Если это ваша основная форма, вам не нужно этого делать. Я уже писал о своих чувствах в Application.CreateForm раньше.)