Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Кто создал экземпляр класса? [D7, WinXP]


Страницы:   1 2 3

yuray ©   (2007-09-26 10:47:00) 

Детский вопрос.
Создал модуль, в котором реализовал класс

Unit MyClassUnt;

interface  

type
 TMyClass = class
   .......
 private
   .......
 public
   .......
 end;

Var
 MyClass: TMyClass;

implementation

..............

end.

В главной форме пишу

uses MyClassUnt;
......
MyClass.SomeMetod;
MyClass.SomeProperty;

Компилирую... Все работает, все нормально...

Вопрос. Кто и где создал экземпляр класса MyClass? Руками нигде я не писал MyClass := TMyClass.Create(); Спасибо.


Reindeer Moss Eater   (2007-09-26 14:03:00) [21]

Шоб мышкой на него кидать всякую хрень.
:)


DVM   (2007-09-26 14:01:00) [22]


> Один поток на клиента и в каждом потоке один экземпляр DM

Нахрена там вообще эти DataModul-и? Он нужен только для удобства проектирования, не более того.


Reindeer Moss Eater   (2007-09-26 13:50:00) [23]

С формой понятно, а зачем может понадобится 10 дата модулей?

Сервер приложений например. Один поток на клиента и в каждом потоке один экземпляр DM


Kolan   (2007-09-26 13:47:00) [24]

> Так же, но не вводить новый метод, а перекрыть NewInstance
> (где проверять глобальную переменную из implementtation)
> и FreeInstance (где ее очищать). Будет чистый синглтон.

Надо попробовать…


> Я особенных возражений на форуме не видел.

С формой понятно, а зачем может понадобится 10 дата модулей?

ЗЫ
 То что то о чем вы говорите можно сделать, и что никто не хуже я не спорю…


Игорь Шевченко   (2007-09-26 13:21:00) [25]

Kolan ©   (26.09.07 13:18) [27]

Не совсем понял, каким образом "кидание контролов в дизайн-тайме" относится к созданию датамодулей в ран-тайме. Вроде вещи не связанные. На форму тоже "кидают контролы", однако против фраз
with TFooForm.Create(Application) do
 Show

Я особенных возражений на форуме не видел. Возникает естественный вопрос - чем форма лучше/хуже датамодуля, что форму можно создавать в момент,когда она требуется, а датамодуль нет ?


Kolan   (2007-09-26 13:18:00) [26]

> вообще-то все объекты в программе создаются в ран-тайме
> и нигде более…

Ну вы же меня поняли…

Дада модуль, имхо, придумали для того, чтобы кидать на него контролы в дизайнтайме…


yuray   (2007-09-26 12:37:00) [27]

Всем спасибо за ответы. Немножко прояснилось...


Игорь Шевченко   (2007-09-26 12:26:00) [28]


> Нафиг вообще дата модули создавать в ран тайме?


Как бы тебе сказать - вообще-то все объекты в программе создаются в ран-тайме и нигде более...


Сергей М.   (2007-09-26 12:03:00) [29]


> Какое решение выбрать?


Простейшее и очевиднейшее - объект должен быть создан в любое время допервого обращения к нему и должен быть уничтожен, как только он более никому не нужен.


Юрий Зотов   (2007-09-26 12:02:00) [30]

> Kolan ©   (26.09.07 11:38) [19]

> как в D7 сделать подругому я незнаю.

Так же, но не вводить новый метод, а перекрыть NewInstance (где проверять глобальную переменную из implementtation) и FreeInstance (где ее очищать). Будет чистый синглтон.


yuray   (2007-09-26 11:58:00) [31]

И все же. Какое решение выбрать? Для меня это очень важно.
yuray ©   (26.09.07 11:14) [14]
Kolan ©   (26.09.07 11:20) [15]
yuray ©   (26.09.07 11:35) [18] .

В последнем варианте мне не нравится пустая dfm-ка. Почему спрашиваю. Результат написания проги - это правильный код. Спасибо.


sniknik   (2007-09-26 11:54:00) [32]

> Так делать правильно?
что значит правильно?

как правильно запрягать лошадь в телегу? ........ (и уже после обьяснений) если хочеш покататься верхом.... телега это римская колесница....  

правильно это так, как нужно для решения задачи, абстрактных понятий "правильности" не существует.


Kolan   (2007-09-26 11:39:00) [33]

Нафиг вообще дата модули создавать в ран тайме?


Kolan   (2007-09-26 11:38:00) [34]

> Так делать правильно?

Да пожалуйста делай.
Синглетон не дает сделать больше одного экземпляра(только не это конкретный вариант реализации, это даёт, а как в D7 сделать подругому я незнаю).


yuray   (2007-09-26 11:35:00) [35]

> Kolan ©   (26.09.07 11:20) [15]

Спасибо за ответ.
А если я добавлю в проект пустой Data Module и там реализую свои методы? Тоесть получится
Unit MyClassUnt;

interface  

type
TMyClass = class(TDataModule)
  .......
private
  .......
public
  .......
end;

Var
MyClass: TMyClass;

implementation

..............

end.

В этом случае компилятор сам создаст MyClass при инициализации Application. (Application.CreateForm(TMyClass, MyClass)). Так делать правильно?


Kolan   (2007-09-26 11:30:00) [36]

> А почему бы в initialization не поместить TDataAccessFacade.Create?

А если он никому не понядобится? Зачаем его создавать…


DVM   (2007-09-26 11:25:00) [37]


> Kolan ©   (26.09.07 11:20) [15]

А почему бы в initialization не поместить TDataAccessFacade.Create?


Kolan   (2007-09-26 11:20:00) [38]

> Как правильно создать MyClass?

Ты хочешь синглетон сделать?

В D7 нет классовых переменных (или нметодов), поэтому я делаю так:

TDataAccessFacade = class
end;

function GetDataAccessFacade: TDataAccessFacade;

implementation
var
 DataAccessFacade: TDataAccessFacade;

function GetDataAccessFacade: TDataAccessFacade;
begin
 if not Assigned(DataAccessFacade) then
   DataAccessFacade := TDataAccessFacade.Create;
 Result := DataAccessFacade;
end;

initialization
finalization
 DataAccessFacade.Free;


yuray   (2007-09-26 11:14:00) [39]

2 sniknik

Согласен. Как правильно создать MyClass? В секции initialization модуля MyClassUnt прописать MyClass := TMyClass.Create();?


sniknik   (2007-09-26 11:10:00) [40]

> Но я пишу MyClass.SomeMetod...
и что там будет в значении если его не создать(присвоить)? переменная то глобальная...
сделай локальной и в ней будет мусор, вот тогда и ошибка будет (а может и повезет... хотя это как сказать)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо