![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TSingleton.Create; — компилится
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 рассказал... Сорри, что не помог ;)