Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

private свойства [D7, 2000]


NiGGa ©   (2007-10-22 22:12:00) 

Доброго времени суток.

Каким образом можно доступиться к private свойствам другого объекта? И насколько это нормально, сточки зрения объектной концепции?

Всем спасибо.


Kolan   (2007-10-23 11:02:00) [1]

> могу тебе заметить, что с развитием языка в последних версиях
> дельфи private это уже не просто private, а скорее friend

Можно подумать раньше было не так. В новых версия просто появился нормальный, человеческий private, и назвали его strict private


Сусл   (2007-10-23 10:58:00) [2]


> Т.е. как я понял единственный метод это искать адрес этого
> самого поля

да

про руки не знаю.:)


NiGGa   (2007-10-23 10:48:00) [3]


> oxffff ©   (22.10.07 22:33) [2]
> Все нормально.
> Ты же не по собственной воле это делаешь.
> А вынужденно.

Это единственное, что меня оправдывает в такой ситуации)


> Сусл ©   (22.10.07 23:37) [3]
> если же класс твой, то в чем проблемы?

В том то и проблема, что класс не мой.


> Ins ©   (22.10.07 23:58) [4]
> Никогда не было такой потребности. Что я делаю неправильно?

Видимо не используете чужие не совсем качественно написанные компоненты) Мне вот пришлось, опять же не по своей воле, и что тут делать?


> Сусл ©   (23.10.07 00:15) [6]
> если серьезно, то согласен - извращением попахивает.

Абсолютно с вами согласен


> DevilDevil   (23.10.07 00:54) [7]
> У данного класса есть потомок, свойство которого открыто?

Свойство которого должно быть открыто в обозримом будущем)


> Leonid Troyanovsky ©   (23.10.07 09:15) [9]
> IMHO, как и в вопросе, некая путаница.
> Приватное поле vs protected property.

Да прошу прощения, именно приватное поле. Это я уже под вечер после Мегаполиса забыл как это дело называется. У них это атрибут, к определению привык, но вот точно казалось что не к Делфе)

all
Т.е. как я понял единственный метод это искать адрес этого самого поля, но это крайне неприветствуется и могут руки поломать?


Игорь Шевченко   (2007-10-23 09:37:00) [4]

В древнем Китае желающим странного отрубали голову.Мудро.


Leonid Troyanovsky   (2007-10-23 09:15:00) [5]


> DevilDevil   (23.10.07 00:54) [8]

> Т.е. у Bevel-а не открыто свойство TControl.Canvas

IMHO, как и в вопросе, некая путаница.
Приватное поле vs protected property.

--
Regards, LVT.


DevilDevil   (2007-10-23 00:54:00) [6]

вообще говоря, можно по смещению.

Предполагаю...
У данного класса есть потомок, свойство которого открыто?
Я сам достаточно часто использую, только реального примера не могу припомнить...

Ну например, недавно было (см [1]): http://www.delphimaster.ru/cgi-bin/forum.pl?id=1192865067&n=18

Т.е. у Bevel-а не открыто свойство TControl.Canvas, а у TPanel - открыто. Следовательно, описаным в ссылке, нехитрым способом можно получить доступ :)


DevilDevil   (2007-10-23 00:54:00) [7]

вообще говоря, можно по смещению.

Предполагаю...
У данного класса есть потомок, свойство которого открыто?
Я сам достаточно часто использую, только реального примера не могу припомнить...

Ну например, недавно было (см [1]): http://www.delphimaster.ru/cgi-bin/forum.pl?id=1192865067&n=18

Т.е. у Bevel-а не открыто свойство TControl.Canvas, а у TPanel - открыто. Следовательно, описаным в ссылке, нехитрым способом можно получить доступ :)


Сусл   (2007-10-23 00:15:00) [8]


> Ни разу не встречал private свойств.

ну так в жабе и нет свойств вообще :)

если серьезно, то согласен - извращением попахивает.

хотя, Юра, могу тебе заметить, что с развитием языка в последних версиях дельфи private это уже не просто private, а скорее friend, ибо виден снутри модуля, а также outer-классу (ну в дельфи теперь тоже есть вложенные классы). в этом случае может быть inner class с private свойством и strict private геттером и сеттером.

так, что у private свойства есть применение.


Юрий Зотов   (2007-10-23 00:05:00) [9]

Ни разу не встречал private свойств.
:o)


Ins   (2007-10-22 23:58:00) [10]


> Каким образом можно доступиться к private свойствам другого
> объекта?

Если знаете смещение поля от начала, просто прочтите n байт по этому смещению от адреса, который содержит ссылка на экземпляр. Хотя возможно сейчас г-н oxffff © вам расскажет про какой-нибудь более изощренный способ.


> И насколько это нормально, сточки зрения объектной концепции?

Да это просто кошмар! Концепции ООП это протеворечит полностью, да и в другой версии класса возможно работать не будет, если смещение изменится.

Никогда не было такой потребности. Что я делаю неправильно?


Сусл   (2007-10-22 23:37:00) [11]

можно как-то. когда-то делал по статье в сети.


> И насколько это нормально, сточки зрения объектной концепции?


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


oxffff   (2007-10-22 22:33:00) [12]


>  И насколько это нормально, сточки зрения объектной концепции?


Все нормально.
Ты же не по собственной воле это делаешь.
А вынужденно.
Держа эту мысль в голове, обращайся к private полям смело, если хорошо знаешь предмет.


oxffff   (2007-10-22 22:18:00) [13]


> NiGGa ©   (22.10.07 22:12)  
> Доброго времени суток.
>
> Каким образом можно доступиться к private свойствам другого
> объекта? И насколько это нормально, сточки зрения объектной
> концепции?
>
> Всем спасибо.


ASM?


Наверх

Титульная страница Поиск, карта сайта Написать письмо