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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вложенные классы 
:(
    Опции темы
Rexar
Дата 26.4.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 14.12.2005

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



Код

  { Данные HTTP протокола }
  TProtocol = class
    Code: integer;        // Код результата
    type
      Read = class
        i: integer;
        type
          request = class
             Method: string;           // Комманда запроса
             URI: string;              // Строка запроса
             ProtocolType: string;     // Тип протокола
             ProtocolVersion: string;  // Версия протокол
          end;
          header = class
            ContentType: string;      // Тип передаваемых данных
            ContentLength: integer;   // Количество байт в "Body"
          end;
          data = class
            Request: string;  // Строка запроса
            Header: string;   // Параметры запроса
            Body: string;     // Дополнительные данные
          end;  

      end;
      Send = class
        z: integer;
        p: char;
      end;
  end;



Как мне работать с этой переменной - Protocol.Read.Data.Request ?

PM MAIL   Вверх
THandle
Дата 27.4.2008, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Класс, пихнул в отдельный юнит:

Код

unit Unit2;

interface
type
  TProtocol = class
    private
    type
      TRead = class
        Fi: integer;
        type
          TRequest = class
              Method: string;
              URI: string;
              ProtocolType: string;
              ProtocolVersion: string;
          end;
          THeader = class
              ContentType: string;
              ContentLength: integer;
          end;
          TData = class
              Request: string;
              Header: string;
              Body: string;
          end;
        private
          FRequest : TRequest;
          FHeader : THeader;
          FData : TData;
        public
          constructor Create;
          property Request : TRequest read FRequest write FRequest;
          property Header : THeader read FHeader write FHeader;
          property Data : TData read FData write FData;
          property i : integer read Fi write Fi;
        end;
      TSend = class
        z: integer;
        p: char;
      end;
      var
        FRead : TRead;
        FSend : TSend;
        i : integer;
    public
      constructor Create;
      property Read_ : TRead read FRead write FRead;
end;

implementation


constructor TProtocol.TRead.Create;
begin
  inherited;
    FRequest := TRequest.Create;
    FHeader := THeader.Create;
    FData := TData.Create;
end;
{ TProtocol }

constructor TProtocol.Create;
begin
  inherited;
    FRead := TRead.Create;
    FSend := TSend.Create;
end;
end.


Использование:

Код

uses unit2;

//...


procedure TForm1.Button1Click(Sender: TObject);
var
  protocol : TProtocol;
begin
  Protocol := TProtocol.Create;
  try
    Protocol.Read_.Data.Request := 'SomeString';
  finally
    Protocol.Free;
  end;
end;

PM   Вверх
Rexar
Дата 27.4.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 14.12.2005

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



Спасибо !  smile 

А если я этот класс использую в процедуре и не уничтожаю его "Protocol.Free;", то при выходе из процедуры он уничтожиться ?
И зачем  try...finally ?

Это сообщение отредактировал(а) Rexar - 27.4.2008, 13:14
PM MAIL   Вверх
VICTAR
Дата 27.4.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

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



Цитата(Rexar @  27.4.2008,  13:12 Найти цитируемый пост)
А если я этот класс использую в процедуре и не уничтожаю его "Protocol.Free;", то при выходе из процедуры он уничтожиться ?

Нет. Уничтожать надо вручную.

Цитата(Rexar @  27.4.2008,  13:12 Найти цитируемый пост)
И зачем  try...finally ?

Чтобы код между finally и end выполнился в любом случае.
PM MAIL   Вверх
HistoryEarth
Дата 28.4.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 23.8.2007

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



Кстати, что в точности произойдет, если не очистить память?
PM MAIL   Вверх
Rennigth
Дата 28.4.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Цитата(HistoryEarth @  28.4.2008,  10:16 Найти цитируемый пост)
Кстати, что в точности произойдет, если не очистить память? 

ее(памяти) станет меньше smile пока процесс запущен.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Beltar
Дата 28.4.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

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



Цитата

А если я этот класс использую в процедуре и не уничтожаю его "Protocol.Free;", то при выходе из процедуры он уничтожиться ?


После вызова может еще не помешать Protocol:=nil, но это только если будешь в дальнейшем снова создавать его, проверяя существование.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Rennigth
Дата 28.4.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Цитата(Beltar @  28.4.2008,  11:34 Найти цитируемый пост)
Protocol:=nil

FreeAndNil smile


--------------------
(* Honesta mors turpi vita potior *)
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.0721 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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