Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Вниз

TObject.Create(без переменной), как добраться до полей?   Найти похожие ветки 

 
Kolan ©   (2007-05-21 18:29) [0]

Вот код:
var
 Command: TFFTMeasuredCommand;
begin
 Command := TPressureMeasuredCommand.Create;
 Command.FFFT := FFTResults;
 TSystemMediator.GetInstance.SendMessage(Command);
end;


Если бы ненадо было заполнять Command.FFFT можно было бы написать:
TSystemMediator.GetInstance.SendMessage(TPressureMeasuredCommand.Create);< /CODE>

А тут как быть? Можно ли сократить запись?


 
Leonid Troyanovsky ©   (2007-05-21 19:16) [1]


> Kolan ©   (21.05.07 18:29)  

> А тут как быть? Можно ли сократить запись?

constructor TPressureMeasuredCommand.Create; override.

--
Regards, LVT.


 
Kolan ©   (2007-05-21 21:22) [2]

> constructor TPressureMeasuredCommand.Create; override.

Нет нет это не то.
Я имел ввиду что то с with&#133


 
Leonid Troyanovsky ©   (2007-05-21 21:44) [3]


> Kolan ©   (21.05.07 21:22) [2]

> Я имел ввиду что то с with…

http://rsdn.ru/Forum/Message.aspx?mid=673350&only=1

--
Regards, LVT.


 
Kolan ©   (2007-05-21 21:51) [4]

Итого, было:
var
Command: TFFTMeasuredCommand;
begin
Command := TPressureMeasuredCommand.Create;
Command.FFFT := FFTResults;
TSystemMediator.GetInstance.SendMessage(Command);
end;


Станет:
begin
with TPressureMeasuredCommand.Create do
  (This as TPressureMeasuredCommand).Command.FFFT := FFTResults;
TSystemMediator.GetInstance.SendMessage(Command);
end;


Вроде короче, еще бы приведения не былобы&#133


 
Leonid Troyanovsky ©   (2007-05-21 21:59) [5]


> Kolan ©   (21.05.07 21:51) [4]

> Вроде короче, еще бы приведения не былобы…

Зачем приведение? This - сделай TPressureMeasuredCommand,
опережающее объявление TPressureMeasuredCommand = class

--
Regards, LVT.


 
Kolan ©   (2007-05-21 22:00) [6]

> Leonid Troyanovsky ©   (21.05.07 21:44)

Короче круто, то что нужно :). Благодарю.


 
Leonid Troyanovsky ©   (2007-05-21 22:00) [7]


> Leonid Troyanovsky ©   (21.05.07 21:59) [5]

> опережающее объявление TPressureMeasuredCommand = class

Это даже не нужно, sorry.

--
Regards, LVT.


 
Kolan ©   (2007-05-21 22:01) [8]

> This &#151; сделай TPressureMeasuredCommand,

Не не этих комманд много, запарюсь делать, я лучьше в предке&#133


 
Kolan ©   (2007-05-21 22:03) [9]

Или можно так:, тоже ниче имхо&#133
 with TLoadPressureCommand.Create do
   with TLoadPressureCommand(This) do
   begin
     FFileName := "";
     TSystemMediator.GetInstance.SendMessage(This);
   end;


 
Loginov Dmitry ©   (2007-05-21 22:15) [10]

Имхо, удобнее, так объявлять:

ThisLoadPressureCommand: TLoadPressureCommand;
ThisPressureMeasuredCommand: TPressureMeasuredCommand;

Тогда можно во вложенных with использовать различные объекты, обладающие общим набором методов.


 
Однокамушкин   (2007-05-22 08:11) [11]


> Kolan ©   (21.05.07 22:03) [9]
> Или можно так:, тоже ниче имхо…

И вы считаете, что это проще, чем первоначальный вариант? Простой и ясный код заменили на какую-то ерунду, через которую ещё продраться надо, чтобы понять, что к чему... О накладных расходах на вызов метода я вообще молчу...


 
Kolan ©   (2007-05-22 10:35) [12]

> И вы считаете, что это проще, чем первоначальный вариант?

Угу, переменной нет.


 
Kolan ©   (2007-05-22 10:37) [13]

> Простой и ясный код заменили на какую-то ерунду

Вот ести у меня ф-ция которая скажем что считает. Нах в ней объявлять Command, который к ней отношения не имеет. Приходится делать Что=то тима DoSendMessage.  А так это не требуется&#133


 
Однокамушкин   (2007-05-22 11:13) [14]


> Kolan ©   (22.05.07 10:37) [13]

Зато с переменной всё просто и понятно... А то какой-то this, с которым ещё разбираться... да и оператор with считается не совсем безопасным - там не вссегда понятно, что к чему относится... И всё это нагромождение, чтобы всего лишь не объявлять вспомогательную переменную? Не вижу логики...


 
SpellCaster   (2007-05-22 14:45) [15]

Что-то я первый раз встречаю использорвание This в Дельфе... У меня такая конструкция не заработала.


 
Leonid Troyanovsky ©   (2007-05-22 15:06) [16]


> SpellCaster   (22.05.07 14:45) [15]
> Что-то я первый раз встречаю использорвание This в Дельфе.
> .. У меня такая конструкция не заработала.

Ты читал не сначала.

Хотя, раз уж ссылка сейчас не работает, повторю своими словами:

Классический способ решения предложил Андрей Лобанов:
для объектов, нуждающихся в самопознании, можно создать
такого потомка:

type
 TSomeObjectREf = class(TSomeObject)
    function This: TSomeObjectRef;
 end;

function TSomeObjectRef.This;
begin
  Result := Self;
end;


Учитывая, что такие объекты планируются для динамического
создания написание такого потомка не выглядит напряжным.

--
Regards, LVT.


 
SpellCaster   (2007-05-22 16:12) [17]

> [16] Leonid Troyanovsky ©   (22.05.07 15:06)

А, теперь понял. Просто линк не пащет, поэтому я статью и не сумел прочитать.
Хм, порождать дочерний класс и реализовывать функцию только ради того, чтобы избавиться от объявления переменной? Сомнительный выигрыш...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.045 c
15-1183170285
Ино
2007-06-30 06:24
2007.07.29
Что означает такая запись? Зачем она используется?


1-1179832264
pasha_golub
2007-05-22 15:11
2007.07.29
Получить значение заданных полей через RTTI


15-1182903039
partizan
2007-06-27 04:10
2007.07.29
Разноцветный TreeView


2-1183374371
malor
2007-07-02 15:06
2007.07.29
Error reading MyAdvStringGrid.SearchFooter.FindNextCaption: Prope


15-1182486389
delphino
2007-06-22 08:26
2007.07.29
Создание инсталлятора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский