Показать сообщение отдельно
  #4  
Старый 18.12.2009, 10:04
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

1.Делать свой конструктор класса необязательно, т.к. по умолчанию все классы наследуются от базового класса у которого есть конструктор Create, но этот конструктор ничего не знает о наследнике и его переменных. И если для статических переменных вызов собственного конструктора можно упустить, то вот для динамических это уже обязательно.
2. Работа с динамическим массивом тоже требует определенных правил. Процедура SetLength инициализирует и устанавливает размерность для динамического масива. Без вызова хотя-бы раз этой процедуры, с таким массивом работать нельзя. В вашем случае, размерность изначально неизвестна, поэтому создаем пустой массив. При добавлении элеменета к массиву надо делать так:
Код:
SetLength(List, Length(List)+1);
Для получения текущей длины массива вызываем Length(List)
Но вот, если вам потребуется вставить или удалить элемент из массива, то уже придется потрудится, т.к. готовых процедур для этого нет.
Как альтернатива динамическому массиву, рекомендуется использовать базовый класс TList. Там уже предусмотрены все основные методы работы с таким массивом.
3. Объявить свойством в данном случае, это воспользоваться специальной конструкцией для классов - property.
В вашем случае для чтения Count надо вызвать Length(List) и для записи в него SetLength(List, Length(List)+1).

Код:
WorldObjects = class
 private
   procedure SetCount(Value: Integer);
   function GetCount: Integer;
 public 
  list:array of Obj;
  count:integer;
 property Count: Integer read GetCount write SetCount;
 ...
end;
...

implementation

procedure WorldObjects.SetCount(Value: Integer);
begin
 SetLength(List, Value);
end;

function WorldObjects.GetCount: Integer;
begin
 Result := Length(List);
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием