Форум: "Основная";
Текущий архив: 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
…
← →
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;
Вроде короче, еще бы приведения не былобы…
← →
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 — сделай TPressureMeasuredCommand,
Не не этих комманд много, запарюсь делать, я лучьше в предке…
← →
Kolan © (2007-05-21 22:03) [9]Или можно так:, тоже ниче имхо…
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
. А так это не требуется…
← →
Однокамушкин (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