Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
15-1181879944
Курдль
2007-06-15 07:59
2007.07.29
Происхождение выпускников Бауманки


3-1177344935
Juice
2007-04-23 20:15
2007.07.29
Результат ХП как рез. поле запроса


15-1182938305
Углук
2007-06-27 13:58
2007.07.29
Прозрачная форма


15-1183008937
Slider007
2007-06-28 09:35
2007.07.29
С днем рождения ! 28 июня 2007 четверг


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