Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вложенные классы


Автор: Rexar 26.4.2008, 22:48
Код

  { Данные 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 ?

Автор: THandle 27.4.2008, 09:03
Класс, пихнул в отдельный юнит:

Код

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;

Автор: Rexar 27.4.2008, 13:12
Спасибо !  smile 

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

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

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

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

Чтобы код между finally и end выполнился в любом случае.

Автор: HistoryEarth 28.4.2008, 10:16
Кстати, что в точности произойдет, если не очистить память?

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

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

Автор: Beltar 28.4.2008, 11:34
Цитата

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


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

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

FreeAndNil smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)