Доступ к элементам массива
Вопрос: как грамотно реализовать работу с данным массивом?
Свожу все вместе: массив должен быть виден из обеих форм, в одной из них нужно запретить модификацию элементов. Напрашивается решение: сделать массив приватным членом класса, но как обеспечить доступ к его элементам в режимах т.с. "только для чтения" и "с возможностью модификации"?
private
mas : array [0..10] of integer;
function GetItem(index : integer) : integer;
public
property item[index : integer] : integer read GetItem;
end;
function TForm1.GetItem(index : integer) : integer;
begin
Result := mas[index];
end;
В таком виде члены класса TForm1 могут читать/писать элементы массива , а члены других классов - только читать.
Вопрос: как грамотно реализовать работу с данным массивом?
Свожу все вместе: массив должен быть виден из обеих форм, в одной из них нужно запретить модификацию элементов. Напрашивается решение: сделать массив приватным членом класса, но как обеспечить доступ к его элементам в режимах т.с. "только для чтения" и "с возможностью модификации"?
Ну во-первых, если твои формы работают с массивом "на равных" (в отношении значимости, а не прав), то его (массив) лучше вынести в отдельный модуль.
Ну а теперь по твоему вопросу.
Самое простое это не изменять или не читать в соответствующей форме.
Ну а если тебе действительно надо обеспечить права доступа, то делаеш класс. Пихаеш ему в privat или protected свои массивы, переменные и т.д. В public пишет методы доступа "getVarray(AObject: TObject) : ......;" и "setVarray(AObject: TObject; AValue: ........);" соответственно. Где AObject - указатель на класс который работает с переменной и по указателю проверяеш привелегии. )) (Но если делать ГРАМОТНУЮ систему привелегий, то это конечно слишком приметивно...)
p.s. Создавать отдельный модуль для такой глобальной конструкции не обязательно, можно создать один модуль (ну на пример "unitVars" или "unitConstantsVars" или т.п.) и туда скидывать все эти глобальные конструкции.
Вот такой вот примерно вариант у меня сейчас. И для данного конкрентного случая не очень удачный. Программа уже больших объемов и многое неудачно реализовано (поскольку времени не было делать многие вещи обдумано - важнее был результат:)) и предполагается, что еще больше разрастется в объемах. В дальнейшем очень сложно будет проследить КАКАЯ процедура и ГДЕ будет что-либо писать в этот массив.