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

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

TSingleton.Create; — компилится


Страницы:   1 2

Kolan ©   (2007-05-16 23:08:00) 

Синглетон:

TSingleton = class
 strict private
   class var FInstance: TSingleton;
   constructor Create;
 strict protected
 public


Пишу:
TSingleton.Create;

Компилится, мне что спать пора?
Почему?


Kolan   (2007-05-17 21:18:00) [1]

> Статья Шаблон Синглетон (Singleton pattern)

Благодарю, но сцылка не работает :)


Amoeba   (2007-05-17 16:53:00) [2]

Статья Шаблон Синглетон (Singleton pattern)
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=267


Kolan   (2007-05-17 13:56:00) [3]

> strict private сделай

Да, получил Parent… Почему, что за бред?


Servelat   (2007-05-17 13:24:00) [4]

strict private сделай, или процедуру Go в другой модуль перенеси.


Kolan   (2007-05-17 13:11:00) [5]

Получил 'Child', а что я должен был получить? Все логично TParent.Test;закрыт.


Servelat   (2007-05-17 11:08:00) [6]

>[18]
Скорее всего вы правы, и когда-нибудь я это пойму. Но пока, ничего криминального в таком коде я по-прежнему не вижу).


> А компилятор(точнее Together) пишет так:

С Together не работал, так что поддержать разговор на должном уровне не смогу.


> Я действительно понять хочу. Как так может быть два метода
> с одним именем и не overload?

Такова селави. Попробуй и убедись, что такое возможно).

 TParent = class
   procedure Test;
 end;

 TChild = class(TParent)
 private
   procedure Test;
 end;

...
procedure TChild.Test;
begin
 ShowMessage('Child');
end;

procedure TParent.Test;
begin
 ShowMessage('Parent');
end;

...
// или в другом модуле, или strict private
procedure Go;
var
 Obj: TChild;
begin
 Obj := TChild.Create;
 Obj.Test;
 Obj.Free;
end;


Игорь Шевченко   (2007-05-17 10:55:00) [7]


> ничего криминального в приведенном коде я не вижу.


Мало работаешь. Со временем поймешь, что краткость - сестра таланта


Kolan   (2007-05-17 10:50:00) [8]

> что код из [0] написал ты

Ты телепат, действительно сам написал. А компилятор(точнее Together) пишет так:
TSingleton = class
 strict private
   constructor Create;

 class var
   FInstance:TSingleton;

 public
   class function GetInstance: TSingleton;
 end;


> Тот, что унаследован от TObject'а никуда не пропал.

Я действительно понять хочу. Как так может быть два метода с одним именем и не overload?


Servelat   (2007-05-17 10:26:00) [9]

> [15]
Если ты сможешь мне доказать, чем FreeAndNil лучше приведенного кода, я сам съем мою мышку). У каждой задачи обычно есть больше одного решения, ничего криминального в приведенном коде я не вижу.

> Дык этот паттерн генерится самим компилятором так!
А мне казалось, что код из [0] написал ты, а не компилятор. Он то в чем виноват?

> Можно было бы другую реализацию сделать…
Вещей, которые можно бы было сделать хватит на много толстых книг. Ориентироваться надо на то, что есть, а не на то, что нам хотелось бы иметь.

> Подумал еще, а почему? Я его закрыл, почему его «никто не отменил»?
Ты не закрыл, ты объявил еще один конструктор. Тот, что унаследован от TObject'а никуда не пропал.


Kolan   (2007-05-17 08:21:00) [10]

Про статью, что-то даверия не внушает:
if Assigned(TimeKeeperInstance) then begin
 TimeKeeperInstance.Destroy;
 TimeKeeperInstance := nil;
end;

Про Free и FreeAndNil автор не знает?


Kolan   (2007-05-17 08:12:00) [11]

> Посмотри вот в этой статейке

Сейчаc гляну.


> Что, мешает?

Мешает то, что я попарился и забыл что класс-синглетон. Написал соответственно Obj := TSingleton.Create;оно скомпилилось, а потом получил ран тайм ошибку… Хотя еще на компиляции Create не должно было появится в CodeInsight, имхо.


> Тот конструктор, что у TObject никто не отменял. Уменьшить
> его видимость ты не можешь)

Подумал еще, а почему? Я его закрыл, почему его «никто не отменил»?


Loginov Dmitry   (2007-05-17 07:57:00) [12]

> Дык этот паттерн генерится самим компилятором так! Что они(Borland)
> не подумали что так получится? Можно было бы другую реализацию
> сделать


Что, мешает?


Kolan   (2007-05-17 07:21:00) [13]

> Но только балалаечно это все имхо, необходимости не вижу.

Дык этот паттерн генерится самим компилятором так! Что они(Borland) не подумали что так получится? Можно было бы другую реализацию сделать…

Хотя, может эта реализация и для C# подходить, а для Delphi не стали немять…


Дурак   (2007-05-17 00:32:00) [14]

Kolan ©   (16.05.07 23:08)
С++ от дельфи отличаем? то что применимо в плюсах - не всегда применимо в дельфи.


Servelat   (2007-05-17 00:23:00) [15]

> [0]
http://slil.ru/24378741
Посмотри вот в этой статейке (pdf, 1.6 метра, журнал какой-то, первая статья) достаточно интересная реализация сингелтона на Делфи. Статья на английском.


{RASkov}   (2007-05-17 00:16:00) [16]

> [6] Kolan ©   (17.05.07 00:10)
> В другом модуле.

Ну так оно и верно, что попадаешь в конструктор TObject... уже рассказал Servelat ©


Servelat   (2007-05-17 00:14:00) [17]


> TSingleton.Create;
>
> Компилится, мне что спать пора?
> Почему?


Тот конструктор, что у TObject никто не отменял. Уменьшить его видимость ты не можешь). Правда, можешь скажем объявить функцию с именем Create и тогда конструктор TObject'а виден не будет. Но только балалаечно это все имхо, необходимости не вижу.


Kolan   (2007-05-17 00:12:00) [18]

> Ты не указал версию делфи, я тебе про D7 рассказал… Сорри,
> что не помог

Да, это BDS 2006. Да это и не оч. фажно strict private — это виден только внутри класса и все, в отличае от private который виден еще и всем в данном модуле.


Kolan   (2007-05-17 00:10:00) [19]

> взависимости от расположения реализации конструктора и строки
> TSingleton.Create;


> Пишу:
> TSingleton.Create;

В другом модуле.


{RASkov}   (2007-05-17 00:09:00) [20]

> и помешен в strict private…

Оу щед... А я и не знаю про это... а что это? ;) Ты не указал версию делфи, я тебе про D7 рассказал... Сорри, что не помог ;)


Страницы:   1 2

Наверх

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