![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 03.01.2008
Сообщений: 9
|
![]()
Для меня не совсем понятно, каким образом осуществляется связь между полем объекта и свойством этого поля. В примере в учебнике, при описании класса, названия поля и его свойства различаются только начальной буквой f (FName - поле, а Name - Свойство) Возможно в этом все и дело?!?! Других "указателей" принадлежности свойства полю я там не нашел. кстати вот этот пример:
Код:
|
![]() |
![]() |
![]() |
#2 | |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
![]() Цитата:
Что касается конкретного примера, если P: TPerson X := P.Address; преобразуется в X := P.GetAddress; P.Addres := X преобразуется в P.SetAddress(X) - в действительности вызывается процедура (т.е. метод) куда в качестве параметра передается X, а уже в процедуре SetAddress значение X как-то записывается в переменную FAddress (или любую другую). Если бы не было свойств, то все эти вызовы методов пришлось бы писать программисту, а со свойствами выглядит так, будто идет присвоение обычных переменных. Вот и всё. Тут, конечно, можно спросить, а нафига вообще вызывать какие-то методы вместо того, чтобы прямо читать/писать из/в FAddress? А дело в том, что иногда (и даже часто) требуется: 1. Выполнить определенную проверку вводимых данных. Например, вдруг фамилия должна записываться только большими буквами? Если писать "напрямую", то в FAddress данные запишутся в том виде, в каком будут в переменной X, а вот если "скрытно" вызывается SetAddress, то данные сначала преобразуются как требуется, а уже затем запишутся на хранение в FAddress. 2. Возможно потребуется выполнить другие действия, например, "оповестить" другие объекты об изменении/добавлении данных в этом объекте. Или записать в лог-файл кто/когда/откуда внес эту запись. 3. Ещё пару тысяч возможных причин... Последний раз редактировалось Jeni; 03.01.2008 в 01:58. |
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 03.01.2008
Сообщений: 9
|
![]()
Ясно. но я все равно не до конца понял, каким образом компилятор определяет, к какому полю принадлежит это свойство?! Почему ,например свойство Name относится к полю fName, а не к fAddress??? ведь там же не написано конкретно: свойство *** - свойство поля f***!!!! или важен порядок описания полей и их свойств????
![]() |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
![]()
Порядок описания полей и методов не важен (хотя требуется, чтобы поля были описаны перед методами). Если бы свойство было записано так:
Property Address: TAddress read FAddress write FAddress; то компилятор бы действительно "определил" что с чем связано. Но в примере написано по-другому: Property Address: TAddress read GetAddress write SetAddress; Это означает, что компилятор понятия не имеет, что свойство Address связано с переменной FAddress - эта "связь" задается в методах GetAddress и SetAddress. Я конечно не знаю конкретной реализации, но в качестве примера: Код:
Код:
Последний раз редактировалось Jeni; 04.01.2008 в 02:28. |
![]() |
![]() |
![]() |
#5 |
Регистрация: 03.01.2008
Сообщений: 9
|
![]()
Вот!!! Теперь все понятно!!! В учебнике не было приведено конкретной реализации методов, а я и не догадался, что в конкретном примере "связи" как таковой и нет то))) Спасибо за разъяснения!!!
![]() |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
![]()
Рад, что помог. В книгах действительно часто всё описано формально правильно, но без объяснения "на пальцах" и отдельные тонкости и "внутренние механизмы" остаются непонятыми. Наверное потому, что авторам эти вещи кажутся настолько "ясными и так", что даже в голову не приходит, что другим оно вовсе не ясно.
Вобщем, как говорится, обращайтесь. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi: Проблема с созданием объектов | Omedus | Помощь студентам | 4 | 08.08.2008 18:42 |
Свойства формы | Teen4jump | Общие вопросы Delphi | 4 | 28.02.2008 01:29 |
Свойства файла | ruPy | Общие вопросы Delphi | 2 | 11.01.2008 19:37 |
Свойства объекта | KBak | Win Api | 5 | 15.08.2007 20:21 |
Свойства ярлыка | Fainder | Win Api | 1 | 26.04.2007 15:26 |