Статические классы в Delphi (Win32)

Как Terw, но с заменой \n

<?php
 $json = str_replace('\n', '', $json);
?>

Должен удалить все разрывы строки, jQuery не должен заменять
, теги, но разрывы строки не должны быть в JSON.

9
задан 29 September 2009 в 17:54
поделиться

6 ответов

Я предполагаю, что вы имеете в виду статические классы, такие как .net (а не «статические», как в традиционном Delphi / Native) - и ответ на это нет.

6
ответ дан 4 December 2019 в 07:35
поделиться

Я не совсем понимаю, что вы подразумеваете под «статическим классом». Вы можете объявить класс, который имеет только методы класса, чтобы эти методы можно было вызывать без создания экземпляра класса.

TSomeClass.SomeMethod;

Это то, что вы хотите?

4
ответ дан 4 December 2019 в 07:35
поделиться

Не изначально.

В зависимости от того, для чего он вам нужен, если для целей вашего кода, в некоторых случаях вы можете заменить его шаблоном Singleton объект.

Для пошагового руководства по реализации этого я бы рекомендовал это руководство , которое охватывает практически любую версию delphi, но если вы используете Delphi 2010, вы также можете использовать новый класс Конструкторы / Деструкторы для улучшения результатов.

2
ответ дан 4 December 2019 в 07:35
поделиться

Вы также можете создать новый модуль с именем uDG_Utils, например, определить класс, определить глобальную переменную для этого класса, а в разделе инициализации и финализации вы будете управлять конструктором и деструктором класса. Теперь все, что вам нужно сделать, это назвать его как mySuperDuperClass.SuperMethod ...

1
ответ дан 4 December 2019 в 07:35
поделиться

Вы можете создать класс, который не содержит ничего, кроме статических методов. Если вам нужно поддерживать какое-то состояние, тогда переменные состояния должны передаваться как параметры var. Невозможно «правильно» получить доступ к статическим переменным, кроме наличия набора глобальных переменных в разделе реализации класса ВНЕ области действия класса, например:

UNIT TestUnit;

INTERFACE

Type
  TStaticClass = Class
  public
    procedure Foo(var Bar:String); static;
  end;

IMPLEMENTATION

var
  LastBar : String; // the last bar
  LastRes : string; // the last result

Procedure TStaticClass.Foo(var Bar:String);
begin
  if Bar <> LastBar then
    LastRes := SomeCPUExpensiveProcess(Bar);
  LastBar := Bar;
  Bar := LastRes;
end;

INITIALIZATION
  LastBar := '';
  LastRes := SomeCPUExpensiveProcess('');
END.
2
ответ дан 4 December 2019 в 07:35
поделиться

РЕДАКТИРОВАТЬ Я отредактировал этот пост, чтобы удалить его. По общему признанию, ответ плохой и заслуживает отрицательных голосов. Я не хочу, чтобы он оставался здесь, чтобы сбивать с толку или вводить кого-либо в заблуждение.

-1
ответ дан 4 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: