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

Вниз

Как создать объект с глобальной видимостью?   Найти похожие ветки 

 
neveGreen   (2008-12-07 23:07) [0]

Как создать объект с глобальной видимостью, чтобы он был видим как Application?


 
Юрий Зотов ©   (2008-12-07 23:12) [1]

Так же, как и любую другую переменную - объявить ее в секции interface.


 
DVM ©   (2008-12-07 23:13) [2]

Собственно, все объекты "глобально видимы".


 
Юрий Зотов ©   (2008-12-07 23:16) [3]

Например:

unit MyUnit;

uses ....

interface

type
 TMyClass = class(...)
 ...
 end;

var
 MyVar: TMyClass;

implementation
...
initialization
 MyVar := TMyClass.Create(...);
finalization
 MyVar.Free;
end.

Подробности см. в справке.


 
DVM ©   (2008-12-07 23:24) [4]


> neveGreen   (07.12.08 23:07)  

или еще проще:


program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils, Classes;
var
 L: TList;
begin
 L := TList.Create;
 try
   //
 finally
   L.Free;
 end;
end.


 
Anatoly Podgoretsky ©   (2008-12-07 23:26) [5]

> neveGreen  (07.12.2008 23:07:00)  [0]

Application не является глобально видимым объекту, а еще точнее, таких объектов нет. Видимостью управляет программист.


 
neveGreen   (2008-12-07 23:33) [6]

я хочу сделать синглтон но чёто не соображу как...


 
Amoeba ©   (2008-12-07 23:43) [7]

Например так:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=267


 
Юрий Зотов ©   (2008-12-08 01:10) [8]

Прочитал материал по ссылке...

"Беда, коль пироги начнет печи сапожник..."
(c) И.А. Крылов.

Прежде, чем писать статьи, автору не помешало бы заглянуть в код TObject или хотя бы в справку. И там он нашел бы два вполне симпатичных метода - NewInstance и FreeInstance. Что избавило бы его от нагромождения целой кучи совершенно лишнего кода при реализации синглтона.

unit SingletonUnit;

uses ...

type
 TSingleton = class(...)
 ...
 public
   class function NewInstance: TObject; override;
   procedure FreeInstance; override;
 end;

function Singleton: TSingleton; // Для получения экземпляра

implementation

var
 _Singleton: TSingleton;

function Singleton: TSingleton;
begin
 if _Singleton = nil then
   TSingleton.Create(..);
 Result := _Singleton
end;

class function TSingleton.NewInstance: TObject;
begin
 if _Singleton = nil then
   _Singleton :=  TSingleton(inherited NewInstance);
 Result := _Singleton;
end;

procedure TSingleton.FreeInstance;
begin
 inherited;
 _Singletone := nil
end;

initialization
 Singleton; // Этого можно и не делать, создание будет по первому запросу
finalization
 _Singleton.Free
end.


 
Германн ©   (2008-12-08 01:27) [9]


> Юрий Зотов ©   (08.12.08 01:10) [8]
>
> Прочитал материал по ссылке...
>
> "Беда, коль пироги начнет печи сапожник..."
> (c) И.А. Крылов.
>

И уж в который раз такое.
Ну а как нам с Амёбой жить далее? Если даже статьи на Королевстве не внушают доверия!
:)


 
neveGreen   (2008-12-08 23:35) [10]

Спасибо. А наблюдатель как я понимаю можно просто сделать на TActionList ?


 
neveGreen   (2008-12-08 23:55) [11]


> Юрий Зотов ©   (08.12.08 01:10) [8]

Stack Overflow ???


 
Юрий Зотов ©   (2008-12-09 00:09) [12]

> neveGreen   (08.12.08 23:55) [11]

Если изменили код - возможно.


 
Григорьев Антон ©   (2008-12-09 08:56) [13]


> Юрий Зотов ©   (08.12.08 01:10) [8]
> Прочитал материал по ссылке...

Юрий, что ж ты это только здесь написал? Скоро ветка уйдёт в архив, и твои поправки будет найти очень трудно. А продублировал бы это ещё и комментариях к самой статье, и все, кто её читает, тоже увидели бы твои замечания.


 
oxffff ©   (2008-12-09 09:39) [14]

Юрий Зотов ©   (08.12.08 01:10) [8]

Позволите чуть поправить?

function Singleton: TSingleton;
begin
if _Singleton = nil then
  TSingleton.Create(..);
Result := _Singleton
end;

на

function Singleton: TSingleton;
begin
Result := TSingleton.Create(..);
end;


 
clickmaker ©   (2008-12-09 13:05) [15]

> [14] oxffff ©   (09.12.08 09:39)

смысл этой поправки?


 
oxffff ©   (2008-12-09 15:29) [16]


> clickmaker ©   (09.12.08 13:05) [15]


Проверка на if _Singleton = nil then делается в

class function TSingleton.NewInstance: TObject;


 
oxffff ©   (2008-12-09 15:42) [17]


> clickmaker ©   (09.12.08 13:05) [15]


Естественно следует не забывать о выполняемом коде переинициализации.
А именно о коде конструкторов и коде AfterConstruction(который выполняется при вызове с параметром классовой ссылки ну или хитро помутив dl регистр).


 
neveGreen   (2008-12-09 21:00) [18]


> Юрий Зотов ©   (08.12.08 01:10) [8]

и как добавить свойство или метод в него?


 
Юрий Зотов ©   (2008-12-09 21:04) [19]

> neveGreen   (09.12.08 21:00) [18]

Странный вопрос. Как и в любой другой класс, конечно.


 
neveGreen   (2008-12-09 21:13) [20]


> Юрий Зотов ©   (09.12.08 21:04) [19]

Ха... а я сделал его потомка!!!! :)


 
Юрий Зотов ©   (2008-12-10 14:59) [21]


> Григорьев Антон ©   (09.12.08 08:56) [13]

Отметился...
:o)


 
Григорьев Антон ©   (2008-12-10 16:29) [22]


> Юрий Зотов ©   (10.12.08 14:59) [21]
> Отметился...
> :o)

Да, я уже видел :) Тема поднята, народ там уже начал предлагать альтернативы :)


 
Ins ©   (2008-12-10 17:06) [23]


> народ там уже начал предлагать альтернативы :)


Ну не нравится мне такая реализация :) Если быть совсем придирчивым, то пример Юрия не всем требованиям к синглтону удовлетворяет. Класс не только должен гарантировать существование единственного экземпляра, но и предоставлять к нему точку доступа. Остальные способы доступа хорошо бы сделать недоступными. Нехорошо получится, если кто-то попытается в обход функции Singletone вызвать конструктор. Ну и породить новый синглтон должно быть максимально просто, без лишних телодвижений в виде объявления переменных/функций доступа. А про NewInstance - это верное замечание.


 
Джо ©   (2008-12-11 02:42) [24]


> Ins ©   (10.12.08 17:06) [23]

Функия Singleton тут избыточна.
Вызывайте конструктор класса, сколько будет угодно :)



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

Текущий архив: 2009.01.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
2-1228816761
Nameziz
2008-12-09 12:59
2009.01.25
Потоки


15-1227078519
Андрей Алекс.
2008-11-19 10:08
2009.01.25
Внешний IP


15-1228120463
Scot Storch
2008-12-01 11:34
2009.01.25
Окна приложения


2-1228771391
cruiser
2008-12-09 00:23
2009.01.25
Как создать компонент в D2009?


15-1228112203
Ламо777
2008-12-01 09:16
2009.01.25
Геометрия, помогите освежить...