Используя наследованный в “Создать” конструкторе TObject

function callZipAPI(addSearchZip){    
var geocoder = new google.maps.Geocoder();
var zipCode = null;

geocoder.geocode({ 'address': addSearchZip }, function (results, status) {
    if (status == google.maps.GeocoderStatus.OK) {

        //var latitude = results[0].geometry.location.lat();
        //var longitude = results[0].geometry.location.lng();

        var addressComponent = results[0].address_components;            
        for (var x = 0 ; x < addressComponent.length; x++) {
            var chk = addressComponent[x];
            if (chk.types[0] == 'postal_code') {
                zipCode = chk.long_name;
            }
        }
        if (zipCode) {
            alert(zipCode);
        }
        else {
            alert('No result found!!');
        }
    } else {            
        alert('Enter proper address!!');
    }
});}
21
задан WeGoToMars 21 April 2009 в 12:31
поделиться

4 ответа

Да. Это ничего не делает, правда, но это безвредно. Я думаю, что важно быть последовательным, всегда вызывая унаследованный конструктор, не проверяя, есть ли на самом деле реализация. Некоторые скажут, что стоит вызывать унаследованный Create, потому что Embarcadero может добавить реализацию TObject.Create в будущем, но я сомневаюсь, что это правда; это сломало бы существующий код, который не вызывает наследуемый Create. Тем не менее, я думаю, что это хорошая идея - называть это только из соображений последовательности.

39
ответ дан 29 November 2019 в 06:46
поделиться

Я всегда так делаю.

Если вы выполняете рефакторинг и перемещаете код к общему предку, вызов унаследованного Create имеет следующие преимущества:

  1. Если у общего предка есть конструктор, вы не можете его вызвать.
  2. Если общий у ancestor есть конструктор с различными параметрами, об этом предупреждает компилятор.
13
ответ дан 29 November 2019 в 06:46
поделиться

Вы также можете переопределить «процедуру AfterConstruction». Эта процедура всегда вызывается, независимо от того, какой конструктор.

public
  procedure AfterConstruction; override;
end;

procedure TfrmListBase.AfterConstruction;
begin
  inherited;
  //your stuff, always initialized, no matter what kind of constructor!
end;

Например: если вы хотите создать объект с конструктором, отличным от обычного TObject.Create, таким как TComponent.Create (AOwner) или пользовательский (перегруженный) конструктор, вы можете получить проблемы, поскольку переопределение не вызывается и (в этом случае) ваша переменная VectorNames будет равна нулю.

2
ответ дан 29 November 2019 в 06:46
поделиться

Я называю это, кроме случаев, когда мне нужен очень оптимизированный конструктор.

2
ответ дан 29 November 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: