Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Доступ к элементам массива

375
04 апреля 2007 года
dominator
199 / / 16.10.2003
Ситуация: существуют две формы. Обе работают с данными, организованными в массив. В одной из форм массив заполняется, анализируется, во второй предполагается только выборка элементов.

Вопрос: как грамотно реализовать работу с данным массивом?
Свожу все вместе: массив должен быть виден из обеих форм, в одной из них нужно запретить модификацию элементов. Напрашивается решение: сделать массив приватным членом класса, но как обеспечить доступ к его элементам в режимах т.с. "только для чтения" и "с возможностью модификации"?
497
04 апреля 2007 года
IL84
267 / / 24.04.2003
Код:
TForm1 = class(TForm)
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 могут читать/писать элементы массива , а члены других классов - только читать.
286
04 апреля 2007 года
misha_turist
572 / / 28.11.2005
Цитата: dominator
Ситуация: существуют две формы. Обе работают с данными, организованными в массив. В одной из форм массив заполняется, анализируется, во второй предполагается только выборка элементов.

Вопрос: как грамотно реализовать работу с данным массивом?
Свожу все вместе: массив должен быть виден из обеих форм, в одной из них нужно запретить модификацию элементов. Напрашивается решение: сделать массив приватным членом класса, но как обеспечить доступ к его элементам в режимах т.с. "только для чтения" и "с возможностью модификации"?


Ну во-первых, если твои формы работают с массивом "на равных" (в отношении значимости, а не прав), то его (массив) лучше вынести в отдельный модуль.

Ну а теперь по твоему вопросу.

Самое простое это не изменять или не читать в соответствующей форме.
Ну а если тебе действительно надо обеспечить права доступа, то делаеш класс. Пихаеш ему в privat или protected свои массивы, переменные и т.д. В public пишет методы доступа "getVarray(AObject: TObject) : ......;" и "setVarray(AObject: TObject; AValue: ........);" соответственно. Где AObject - указатель на класс который работает с переменной и по указателю проверяеш привелегии. )) (Но если делать ГРАМОТНУЮ систему привелегий, то это конечно слишком приметивно...)

p.s. Создавать отдельный модуль для такой глобальной конструкции не обязательно, можно создать один модуль (ну на пример "unitVars" или "unitConstantsVars" или т.п.) и туда скидывать все эти глобальные конструкции.

375
04 апреля 2007 года
dominator
199 / / 16.10.2003
Спасибо за ответы. Все понятно.

Цитата: misha_turist
...можно создать один модуль (ну на пример "unitVars" или "unitConstantsVars" или т.п.) и туда скидывать все эти глобальные конструкции.



Вот такой вот примерно вариант у меня сейчас. И для данного конкрентного случая не очень удачный. Программа уже больших объемов и многое неудачно реализовано (поскольку времени не было делать многие вещи обдумано - важнее был результат:)) и предполагается, что еще больше разрастется в объемах. В дальнейшем очень сложно будет проследить КАКАЯ процедура и ГДЕ будет что-либо писать в этот массив.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог