Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> class метод инициализация перед работой, для тех кто знает Delphi2006, 2007 
:(
    Опции темы
Delphist
Дата 6.8.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Есть такой класс
Код

  TClassHistoryID = class
  public
    class var
      HistoryID:  array of THistoryID;

    class procedure Add(OldID: integer; NewID: integer; Sign: integer); overload;
    class procedure Add(_HistoryID: THistoryID); overload;
    class procedure Delete(OldID: integer; NewID: integer; Sign: integer); overload;
    class procedure Delete(_HistoryID: THistoryID); overload;
    class procedure Clear;
    ....
  end;

Эти навороты предлагает Delphi2006 и выше. Меня интересует можно ли делать инициализацию переменных внутри классы без конструктора. Такую фишку без проблем осуществвляет Java.



--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Snowy
Дата 6.8.2007, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Конструктор порождает экземпляр класса.
Для работы с классовыми вещами он совсем не нужен.
Но, если тебе нужен синглтон, то лучше воспользоваться объектами, а не классом.
Они и стандартней и компактней.
(Я имею ввиду TClassHistoryID = object).
Но без инициализации не обойтись.
Хотя можно сделать неявную инициализацию в секции initialization.
PM MAIL   Вверх
Delphist
Дата 6.8.2007, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(Snowy @ 6.8.2007,  20:08)
Конструктор порождает экземпляр класса.
Для работы с классовыми вещами он совсем не нужен.
Но, если тебе нужен синглтон, то лучше воспользоваться объектами, а не классом.
Они и стандартней и компактней.
(Я имею ввиду TClassHistoryID = object).
Но без инициализации не обойтись.
Хотя можно сделать неявную инициализацию в секции initialization.

В Jave это смогли сделать а в Delphi почему нет. СТранно.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Snowy
Дата 6.8.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



То что в джаве сделано синглтоном, в дельфи - глобальные процедуры и функции.
Они инициализируются изначально.
А в дельфи нет понятия абсолютного синглтона.
Даже синглтон может быть размножен.
Все классы и объекты гибридны.
Реальный инициализируемый синглтон в дельфи - глобальные переменные и процедуры.
Кстати, в Delphi.NET они так и компилятся - как синглтон.
А гибриды нельзя проинициализировать изначально - динамика...
Поэтому инициализация выполняется кодом.
А код должен где-то запускаться.
Либо явно вызовом метода, либо неявно автоматом при старте программы в секции инициализации.
Для этого она и придумана.
Да и называется соответственно.
Не спорю, можно было бы продумать и более неявное решение.
Но паскаль - строгий язык. Всё должно быть строго обозначено.
Если выделяется память, её нужно инициализировать, а не оставлять подразумеваемый код.
Такова концепция. Можно её ругать или хвалить, но так это задумано.
Как плюс - не требуется ресурс - надо инициализируй, не надо - не трогай.
Неявный в паскале только полиморфизм. Но это основополагающий концепт ООП.
Да и он становится явным, если смотреть код класса.
PM MAIL   Вверх
ils
Дата 7.8.2007, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 8.9.2006
Где: Москва

Репутация: нет
Всего: нет



Я когда-то нашел нечто похожее на синглтон

Добавлено через 35 секунд
Код

unit UMyClass;

interface

uses Classes; // Наверное, еще что-то надо добавить, но я не помню, что именно

type
  TMyClass = class
  public
    // реализация синглтона
    class function NewInstance: TObject; override;
    procedure FreeInstance; override;
    class function RefCount: Integer;
  end;

implementation

var
  FInstance: TMyClass = nil;
  FRef_Count: Integer = 0;

procedure TTransportCommandManager.FreeInstance;
begin
  Dec(FRef_Count);
  if (FRef_Count= 0 ) then
  begin
    FInstance:= nil;
    // Destroy private variables here
    inherited FreeInstance;
  end;
end;

class function TTransportCommandManager.NewInstance: TObject;
begin
  if not Assigned(FInstance) then
  begin
    FInstance := TMyClass(inherited NewInstance);
    // Initialize private variables here, like this:
    // TMyClass(FInstance).FMyField := nil;
    // TMyClass(FInstance).MyProperty := True;
  end;
  Result := FInstance;
  Inc(FRef_Count);
end;

class function TTransportCommandManager.RefCount: Integer;
begin
  Result := FRef_Count;
end;

end.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0753 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.