Delphi - Использование TStringList в определении класса (очень новое)

Я делаю простое определение класса в Delphi, и я хотел использовать TStringList в классе и его конструкторе (поэтому каждый раз, когда вы создаете объект, вы передаете ему StringList и это делает некоторые магические вещи с StringList данные, копирование списка строк в собственный внутренний список строк). Проблема, которую я получаю, заключается в том, что когда я пытаюсь объявить, что он "использует" перед определением класса (поэтому он знает, как обрабатывать TStringList), это не удается при компиляции. Но без этого он не знает, что такое TStringList является. Так что, похоже, проблема в сфере охвата.

Ниже приведено (очень упрощенное) определение класса, подобное тому, что я пытаюсь сделать. Может кто-нибудь подсказать, как я могу сделать эту работу и получить правильное определение объема?

Я также попытался добавить операторы использования на уровне проекта, но все равно не получилось. Интересно, что мне нужно сделать, чтобы понять это правильно.

unit Unit_ListManager;

interface

type
TListManager = Class

private
  lmList   : TStringList;
  procedure SetList;


published
  constructor Create(AList : TStringList);
end;

implementation

uses
  SysUtils,
  StrUtils,
  Vcl.Dialogs;

  constructor TBOMManager.Create(AList : TStringList);
  begin
    lmList := TStringList.Create;
    lmList := AListList;
  end;

  procedure SetPartsList(AList : TStringList);
  begin
     lmList := AListList;
     ShowMessage('Woo hoo, got here...');
  end;
end.

С уважением

1 ответ

Решение

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

Я также исправил ваше определение constructor, который вы поместили в published вместо public, Только property предметы принадлежат published раздел.

unit Unit_ListManager;

interface

uses
  Classes,
  SysUtils,
  StrUtils,
  Vcl.Dialogs;    

type
TListManager = Class
private
  lmList   : TStringList;
  procedure SetList;    
public
  constructor Create(AList : TStringList);
end;

implementation

constructor TListManager.Create(AList : TStringList);
begin
  inherited Create; // This way, if the parent class changes, we're covered!
  // lmList := TStringList.Create; This would produce a memory leak!
  lmList := AListList;
end;

procedure TListManager.SetList;
begin
// You never provided an implementation for this method
end;

end.
Другие вопросы по тегам