Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > operator with


Автор: IvIvI 13.7.2013, 17:55
есть код

Код

  With TForm.create(self) do begin
     makeSmthWithForm(FORM);
  end;


как внутри оператора With обратиться к форме, точнее как передать в метод makeSmthWithForm созданную форму в операторе With

Автор: northener 13.7.2013, 17:59
Цитата(IvIvI @  13.7.2013,  17:55 Найти цитируемый пост)
как внутри оператора With обратиться к форме

Считай что никак.

Автор: Poseidon 13.7.2013, 23:14
Тут только заводить переменную - ссылку на создаваемую форму и потом уже эту переменную передавать. Внутри именно такой конструкции не получится

Автор: MetalFan 16.7.2013, 12:11
Если используется одна из свежих версий делфи, то можно извернуться с пом.хелпера, типа:
Код

   TObjectHelper = class helper for TObject
     function GetSelf: TObject;
   end;
...
  function TObjectHelper.GetSelf: TObject;
  begin
     Result := Self;
  end;


Ну и в конструкции with появится возможность вызывать GetSelf чтобы получить ссылку на объект в with...
А еще от http://docwiki.embarcadero.com/RADStudio/XE4/en/What%27s_New_in_Delphi_and_C%2B%2BBuilder_XE4, если планируется написание кроссплатформенного кода или кода для мобильных платформ...
Цитата

Note: The With statement might not be supported in the future by the mobile compilers or new compilers. We recommend that you refactor or rewrite any With statements in your code base, and eliminate With statements where possible.

Автор: Poseidon 16.7.2013, 16:09
Цитата(MetalFan @  16.7.2013,  12:11 Найти цитируемый пост)
Note: The With statement might not be supported in the future by the mobile compilers or new compilers. We recommend that you refactor or rewrite any With statements in your code base, and eliminate With statements where possible.
Обалдеть. По началу рекомендовали использовать, типо читаемость улучшается, а теперь refactor рекомендуют.

Автор: northener 16.7.2013, 17:16
Цитата(Poseidon @  16.7.2013,  16:09 Найти цитируемый пост)
По началу рекомендовали использовать, типо читаемость улучшается

Но читаемость никогда и не улучшалась, зато отладка очень осложнялась при использовании with.

Автор: Poseidon 17.7.2013, 12:15
Цитата(northener @  16.7.2013,  17:16 Найти цитируемый пост)
Но читаемость никогда и не улучшалась

Ну не скажи
Код

MyFirstClass.MySecondClass.MyThirdClass.MyFirstMethod;
MyFirstClass.MySecondClass.MyThirdClass.MySecondMethod;
MyFirstClass.MySecondClass.MyThirdClass.MyThirdMethod;

или
Код

with MyFirstClass.MySecondClass.MyThirdClass do
begin
  MyFirstMethod;
  MySecondMethod;
  MyThirdMethod;
end;

Автор: Illusion Dolphin 17.7.2013, 12:39
Цитата

MyFirstClass.MySecondClass.MyThirdClass.MyFirstMethod;
MyFirstClass.MySecondClass.MyThirdClass.MySecondMethod;
MyFirstClass.MySecondClass.MyThirdClass.MyThirdMethod;

В таком случае заводится переменная. Тем более, что такие вложенные конструкции страдают очень часто от NullPointerException и если произошла в такой строчке ошибка, то непонятно, что не так, даже если имеется строка с ошибкой из отладочной информации.

Автор: northener 17.7.2013, 17:43
Цитата(Poseidon @  17.7.2013,  12:15 Найти цитируемый пост)
Ну не скажи

А ты не путаешь наглядность и количество писанины?

А уж вот в таком варианте:
Код

  with obj1, ..., objn do statement

вообще не только наглядностью не пахнет, так и самые настоящие грабли на каждой строчке "statement" запрятаны smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)