![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Traum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
В качестве примера возьмем тип TMemo:
Если я что-либо присваиваю Lines, то TMemo через метод SetLines будет в курсе происходящего. А если я, получив ссылку на FLines посредством доступа read, использую методы и свойства TStrings и тем самым модифицирую FLines, то как TMemo знает, что творится с его Flines? |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Это потому что Lines у Memo это не TStringList, а свой класс, который тоже следит за тем, что у него там творится.
|
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
смотри кишки vcl StdCtrls.TMemoStrings наследники TStrings разные бывают) -------------------- There are always someone smarter than you... |
|||
|
||||
| Esperito |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 2.9.2007 Репутация: нет Всего: 3 |
Таким образом, FLines всё знает про Memo, ибо TMemoStrings для такого и заточена. |
|||
|
||||
| lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
Используй для этих целей TStringList, не абстрактный класс... а TStrings - это абстрактный класс... -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
| Traum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
Спасибо, с Memo ясно.
Но вопрос остался для меня не ясным: TMemo я привел в качестве примера. Я хочу создать свой тип, при этом хочу быть в курсе происходящего и контролировать модификации поля FComplex :
Есть ли возможность контролировать произвол модификации поля FComplex, который возможен благодаря методам и свойств TSomeComplexType? Вариант - не давать этого property и дублировать в public методы и свойства TSomeComplexType - не очень привлекателен Ответ Esperito наводит на мысль что стоит делать так: FComplex объявить как переменную типа TSomeComplexType, но для TSomeComplexType создать наследника, заточенного под себя, и создавать FComplex методом этого наследника. Возможно этим мой вопрос закрыт Это сообщение отредактировал(а) Traum - 2.9.2007, 22:38 |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Если поле - класс, то он должен сам себя контролировать.
Если требуется уведоблять класс-владелец, то заведи события для этого. |
|||
|
||||
| Esperito |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 2.9.2007 Репутация: нет Всего: 3 |
Сделай так:
|
|||
|
||||
| Traum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
Общие вопросы новичка в области программирования: 1. Если пользователю предоставляется набор инструментов, то он вправе думать, что он вправе их все использовать?. Тогда Если в рамках примера с TMemo есть возможность запустить команду TMemo.Lines.Free, которая уничтожает объект, на который указывает поле FLines, то пользователь может полагать что это не зря так допущено? 2. Верно ли что ни в DelphiLanguageGuide, ни DevelopersGuide, ни в русских учебниках или статьях (даже здесь на форуме Esperito, Разве может function GetComplex: TSomeComplexType ограничить возможности, предоставляемые TSomeComplexType, и контролировать их использование? Snowy, //Если требуется уведоблять класс-владелец, то заведи события для этого. // Но эти события у TSomeComplexType будут в public и что получится, если пользователь через предоставленное ему property присвоит этим событиям свои процедуры, тогда TMyType остается только надеяться, что пользователь этого не сделает, а если сделает, так пусть винит сам себя, когда будет пытаться понять в чем же глюк? |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
||||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |