| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Property со сложным типом |
| Автор: Traum 2.9.2007, 19:49 | ||
В качестве примера возьмем тип TMemo:
Если я что-либо присваиваю Lines, то TMemo через метод SetLines будет в курсе происходящего. А если я, получив ссылку на FLines посредством доступа read, использую методы и свойства TStrings и тем самым модифицирую FLines, то как TMemo знает, что творится с его Flines? |
| Автор: Snowy 2.9.2007, 20:22 |
| Это потому что Lines у Memo это не TStringList, а свой класс, который тоже следит за тем, что у него там творится. |
| Автор: Esperito 2.9.2007, 21:16 | ||
Таким образом, FLines всё знает про Memo, ибо TMemoStrings для такого и заточена. |
| Автор: lukas 2.9.2007, 21:48 | ||
Используй для этих целей TStringList, не абстрактный класс... а TStrings - это абстрактный класс... |
| Автор: Traum 2.9.2007, 21:50 | ||
| Спасибо, с Memo ясно. Но вопрос остался для меня не ясным: TMemo я привел в качестве примера. Я хочу создать свой тип, при этом хочу быть в курсе происходящего и контролировать модификации поля FComplex :
Есть ли возможность контролировать произвол модификации поля FComplex, который возможен благодаря методам и свойств TSomeComplexType? Вариант - не давать этого property и дублировать в public методы и свойства TSomeComplexType - не очень привлекателен Ответ Esperito наводит на мысль что стоит делать так: FComplex объявить как переменную типа TSomeComplexType, но для TSomeComplexType создать наследника, заточенного под себя, и создавать FComplex методом этого наследника. Возможно этим мой вопрос закрыт |
| Автор: Snowy 2.9.2007, 23:42 |
| Если поле - класс, то он должен сам себя контролировать. Если требуется уведоблять класс-владелец, то заведи события для этого. |
| Автор: Esperito 3.9.2007, 16:17 | ||
Сделай так:
|
| Автор: Traum 3.9.2007, 20:13 |
Общие вопросы новичка в области программирования: 1. Если пользователю предоставляется набор инструментов, то он вправе думать, что он вправе их все использовать?. Тогда Если в рамках примера с TMemo есть возможность запустить команду TMemo.Lines.Free, которая уничтожает объект, на который указывает поле FLines, то пользователь может полагать что это не зря так допущено? 2. Верно ли что ни в DelphiLanguageGuide, ни DevelopersGuide, ни в русских учебниках или статьях (даже здесь на форуме Esperito, Разве может function GetComplex: TSomeComplexType ограничить возможности, предоставляемые TSomeComplexType, и контролировать их использование? Snowy, //Если требуется уведоблять класс-владелец, то заведи события для этого. // Но эти события у TSomeComplexType будут в public и что получится, если пользователь через предоставленное ему property присвоит этим событиям свои процедуры, тогда TMyType остается только надеяться, что пользователь этого не сделает, а если сделает, так пусть винит сам себя, когда будет пытаться понять в чем же глюк? |
| Автор: Snowy 3.9.2007, 21:04 |
| Они будут там, где ты их объявишь. |