Специальный контроль доступа к свойству в классе CLI / C # - PullRequest
0 голосов
/ 06 декабря 2011

Я пытаюсь заставить код, который использует мой класс, всегда получать одно из его свойств напрямую - никогда не сохраняйте его и не используйте его отдельно.Например, я хочу, чтобы следующее было некомпилируемым.

int x = myObj->prop1;
int y = x + 1;

Я хочу заставить их получить следующее значение:

int y = myObj->prop1 + 1;

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

Если вы хотите знать, почему, это сложно, но связано с тем, чтобы заставить код использовать мой класс таким образом, чтобы он был совместим с будущей итерациейкласса.

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Вы можете вернуть какой-нибудь не копируемый прокси вместо экземпляра сохраненной переменной. Но учтите, что для типов значений возвращаемый экземпляр является полностью независимой копией вспомогательного поля вашего свойства, поэтому у клиента вашей библиотеки нет возможности нанести «какой-либо вред» ... Хм, может быть, вам следует объяснить свои намерения в подробнее ...

0 голосов
/ 21 января 2012

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

Однако теперь я понимаю, что если вы хотите сделать это, вам нужно, чтобы ваша собственность НЕ была ссылкой. Пока вы можете представлять свое имущество неуправляемым объектом, это возможно.

Например, мой класс "Foo" имеет ссылку "Point", которая имеет значения X и Y.

Я могу добавить свойство в Foo, которое возвращает структуру со значениями X и Y, а не ссылку на сам объект.

Тогда внешний объект может видеть значение объекта Point, но не связываться с самим объектом.

Другой способ состоит в том, чтобы сделать элементы / методы «Point» в основном внутренними, поэтому, когда Foo возвращает его как свойство, внешняя сборка не может ничего сделать, кроме чтения значений X Y.

Спасибо за внимание всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...