Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Вниз

TSingleton.Create; — компилится   Найти похожие ветки 

 
Kolan ©   (2007-05-16 23:08) [0]

Синглетон:

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


Пишу:
TSingleton.Create;

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


 
Kolan ©   (2007-05-16 23:10) [1]

Ctrl + Click на Create попадаю в конструктор TObject. Что за?


 
{RASkov} ©   (2007-05-16 23:52) [2]

> [1] Kolan ©   (16.05.07 23:10)

конструктор - это классовый метод, он и должен применятся к классу, а не к эзмпляру класса(что впринципе не запрещено). При применении конструктора к экземпляру - просто отработает код конструктора, но память не выделится.

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

Может быть....;)
ЗЫ я про D7 но, думаю, и в поздних версиях тоже самое...


 
{RASkov} ©   (2007-05-16 23:57) [3]

> Ctrl + Click на Create попадаю в конструктор TObject. Что
> за?

Хм... должен попасть либо на описание конструктора в твоем классе либо на его реализацию.... взависимости от расположения реализации конструктора и строки TSingleton.Create; Если строка выше реализации конструктора то Ctrl+Click попадаем в описание, ну и если ниже то в реализацию.... Вот.


 
Kolan ©   (2007-05-17 00:07) [4]

Дык это же синглетон! Его конструктор вызвать низя, поэтому он(конструктор) и помешен в strict private&#133


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

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

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


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

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


> Пишу:
> TSingleton.Create;

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


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

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

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


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


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


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


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

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

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


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

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


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

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


 
Kolan ©   (2007-05-17 07:21) [12]

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

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

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


 
Loginov Dmitry ©   (2007-05-17 07:57) [13]

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


Что, мешает?


 
Kolan ©   (2007-05-17 08:12) [14]

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

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


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

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


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

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


 
Kolan ©   (2007-05-17 08:21) [15]

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

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


 
Servelat ©   (2007-05-17 10:26) [16]

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

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

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

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


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

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

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

 class var
   FInstance:TSingleton;

 public
   class function GetInstance: TSingleton;
 end;


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

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


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


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


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


 
Servelat ©   (2007-05-17 11:08) [19]

>[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;


 
Kolan ©   (2007-05-17 13:11) [20]

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


 
Servelat ©   (2007-05-17 13:24) [21]

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


 
Kolan ©   (2007-05-17 13:56) [22]

> strict private сделай

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


 
Amoeba ©   (2007-05-17 16:53) [23]

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


 
Kolan ©   (2007-05-17 21:18) [24]

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

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



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

Форум: "Основная";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.036 c
15-1182782540
icqbot
2007-06-25 18:42
2007.07.22
ICQ BOT


2-1182570565
bagos
2007-06-23 07:49
2007.07.22
попиксельное изменение


1-1179386675
ewer
2007-05-17 11:24
2007.07.22
Вызов скрипта на Matlab е из программы на Delphi


2-1182838008
Kolan
2007-06-26 10:06
2007.07.22
Как клонировать форму проекта?


15-1182431463
Desdechado
2007-06-21 17:11
2007.07.22
Freeware-аналог для ResourceHacker и ExeScope





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский