![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TObject.Create(без переменной), как добраться до полей?
Kolan © (2007-05-21 18:29:00)Вот код:
var
Command: TFFTMeasuredCommand;
begin
Command := TPressureMeasuredCommand.Create;
Command.FFFT := FFTResults;
TSystemMediator.GetInstance.SendMessage(Command);
end;
Если бы ненадо было заполнятьCommand.FFFTможно было бы написать:
TSystemMediator.GetInstance.SendMessage(TPressureMeasuredCommand.Create);< /CODE>
А тут как быть? Можно ли сократить запись?
SpellCaster (2007-05-22 16:12:00) [1]> [16] Leonid Troyanovsky © (22.05.07 15:06)
А, теперь понял. Просто линк не пащет, поэтому я статью и не сумел прочитать.
Хм, порождать дочерний класс и реализовывать функцию только ради того, чтобы избавиться от объявления переменной? Сомнительный выигрыш...
Leonid Troyanovsky (2007-05-22 15:06:00) [2]
> 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 14:45:00) [3]Что-то я первый раз встречаю использорвание This в Дельфе... У меня такая конструкция не заработала.
Однокамушкин (2007-05-22 11:13:00) [4]
> Kolan © (22.05.07 10:37) [13]
Зато с переменной всё просто и понятно... А то какой-то this, с которым ещё разбираться... да и оператор with считается не совсем безопасным - там не вссегда понятно, что к чему относится... И всё это нагромождение, чтобы всего лишь не объявлять вспомогательную переменную? Не вижу логики...
Kolan (2007-05-22 10:37:00) [5]> Простой и ясный код заменили на какую-то ерунду
Вот ести у меня ф-ция которая скажем что считает. Нах в ней объявлять Command, который к ней отношения не имеет. Приходится делать Что=то тимаDoSendMessage. А так это не требуется
Kolan (2007-05-22 10:35:00) [6]> И вы считаете, что это проще, чем первоначальный вариант?
Угу, переменной нет.
Однокамушкин (2007-05-22 08:11:00) [7]
> Kolan © (21.05.07 22:03) [9]
> Или можно так:, тоже ниче имхо…
И вы считаете, что это проще, чем первоначальный вариант? Простой и ясный код заменили на какую-то ерунду, через которую ещё продраться надо, чтобы понять, что к чему... О накладных расходах на вызов метода я вообще молчу...
Loginov Dmitry (2007-05-21 22:15:00) [8]Имхо, удобнее, так объявлять:
ThisLoadPressureCommand: TLoadPressureCommand;
ThisPressureMeasuredCommand: TPressureMeasuredCommand;
Тогда можно во вложенных withиспользовать различные объекты, обладающие общим набором методов.
Kolan (2007-05-21 22:03:00) [9]Или можно так:, тоже ниче имхо
with TLoadPressureCommand.Create do
with TLoadPressureCommand(This) do
begin
FFileName := '';
TSystemMediator.GetInstance.SendMessage(This);
end;
Kolan (2007-05-21 22:01:00) [10]> This сделай TPressureMeasuredCommand,
Не не этих комманд много, запарюсь делать, я лучьше в предке
Leonid Troyanovsky (2007-05-21 22:00:00) [11]
> Leonid Troyanovsky © (21.05.07 21:59) [5]
> опережающее объявление TPressureMeasuredCommand = class
Это даже не нужно, sorry.
--
Regards, LVT.
Kolan (2007-05-21 22:00:00) [12]> Leonid Troyanovsky © (21.05.07 21:44)
Короче круто, то что нужно :). Благодарю.
Leonid Troyanovsky (2007-05-21 21:59:00) [13]
> Kolan © (21.05.07 21:51) [4]
> Вроде короче, еще бы приведения не былобы…
Зачем приведение? This - сделай TPressureMeasuredCommand,
опережающее объявление TPressureMeasuredCommand = class
--
Regards, LVT.
Kolan (2007-05-21 21:51:00) [14]Итого, было:
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:44:00) [15]
> 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:22:00) [16]> constructor TPressureMeasuredCommand.Create; override.
Нет нет это не то.
Я имел ввиду что то сwith
Leonid Troyanovsky (2007-05-21 19:16:00) [17]
> Kolan © (21.05.07 18:29)
> А тут как быть? Можно ли сократить запись?
constructor TPressureMeasuredCommand.Create; override.
--
Regards, LVT.