| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Вопрос о свойствах (property) |
| Автор: Ryn 6.9.2006, 15:05 | ||||
у меня есть запись, она используется в классе:
но при обращении к полям fValue_1 или fValue_2:
делфи пишет - "Left side cannot be assigned to". как это устранить ? только я не хочу писать функции присваивания в классе для этих полей. |
| Автор: Romikgy 6.9.2006, 15:09 |
| а на кой те этот гемор? нельзя эту запись в publiс засунуть? |
| Автор: Alexeis 6.9.2006, 15:15 |
Не надо учить плохому! Это и есть реализация инкапсуляции - базового принципа ООП. Ryn, Проидется писать через промежуточную переменную типа TTest |
| Автор: Alexeis 6.9.2006, 15:37 |
Пока что нет но в будущем такой класс легко наращивать или безопасно изменять. Просто вместо переменной будет указана функция которая помимо присваивания сделает может еще десяток операций, т.о. интерфес сохранится а функциональность возрастет. Так что модификации подвергнется только код класса, а не код всех проектов использующих этот класс. |
| Автор: Yanis 6.9.2006, 15:41 | ||
|
| Автор: Snowy 6.9.2006, 15:44 | ||||
| Romikgy, есть такая штука - инкапсуляция. Сейчас ты поднимаешь вопрос о том, зачем она нужна... Об этом расскажет любая книжка по ООП. Теперь к вопросу. Почему. Потому что запись не ссылочный тип и не может полноценно использоваться, как проперти. Какой тут выход. 1. Использовать не запись, а объект.
2. Использовать указатель на запись.
Добавлено @ 15:46 Ну, и как указал Yanis, в текущем состоянии запись можно назначать только целиком. |
| Автор: Ryn 6.9.2006, 15:49 |
| понял, всем спасибо. буду как публис использовать, так проще вроде _) |
| Автор: Romikgy 6.9.2006, 16:00 | ||
знаю , просто знаю , только мало вижу смысл ее здесь применения (имено так как был описан класс!) нет не поднимаю |
| Автор: Snowy 6.9.2006, 16:05 |
| Так конечно проще. Не самое грамотное решение, но кода меньше. Никогда не знаешь, когда понадобится. Сейчас кажется - нафиг не нужно, а потом "блин, надо было". Всё таки грамотный красивый стиль подразумевает инкапсулировать, а не выпячивать на публику. |
| Автор: Romikgy 6.9.2006, 16:48 |
| Еще раз повторюсь , я все говорил применительно к выставленому коду! ЗЫ ну объясни мне смысл прятать переменую в приват , если в паблике ты обращаешься к ней на прямую? |
| Автор: Ryn 6.9.2006, 16:53 |
| Romikgy, просто столкнулся с такой проблемой и решил спросить. ведь со стандартными типами и классами работает, а с записью нет. |
| Автор: Snowy 6.9.2006, 17:41 | ||
В идеале вообще не должно быть прямого доступа, а только инкапсуляция. Но дельфи позволяет писать на разных уровнях. Да можно и делать прямой доступ. Просто так не принято в ООП. Посмотри исходняки VCL и другиз стандартных классов. Нигде нет прямого обращения - всё сделано через инкапсуляцию. Я не заставляю, всего лишь указываю, что грамотно инкапсулировать. |
| Автор: Romikgy 6.9.2006, 18:39 |
дык я об этом и говорю! и про это должна быть не спорю, но имхо она должна быть еще и разумной! |