Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];

Вниз

Как сделать в классе поле (по аналогии с абстрактными методами)?   Найти похожие ветки 

 
Sergp.   (2006-07-01 19:22) [0]

Не могу толком сформулировать вопрос, но если Ваш телепатор поймет что я хочу, ответьте пожалуйста.

Допустим имеется:

TB=Class(TBB)
...
TB1=class(TB)
...
TB2=class(TB)
...
TA=class(TAA)
...

TA1=class(TA)
 public
   F:TB1;
   ...
 end;

TA2=class(TA)
 public
   F:TB2;
   ...
 end;

Можно ли с делать в классе TA поле F:TB, так чтобы можно было обращаться к объектам классов TA1 и TA2  как к TA, чтобы добраться до поля F для того чтобы использовать методы описанные в TB? И как?

Вобщем по аналогии как можно делать с методами, т.е. типа описывается класс с абстрактными методами, которые перекрываются в наследниках. А как сделать такое же с полями?


 
Жуков Олег   (2006-07-01 20:10) [1]

Объявить F: TB в классе TB, из TB1 и TB2 объявление убрать.


 
Жуков Олег   (2006-07-01 20:14) [2]


> Объявить F: TB в классе TB, из TB1 и TB2 объявление убрать.

- вместо "В" читать "A"


 
SergP.   (2006-07-01 22:00) [3]

> [2] Жуков Олег   (01.07.06 20:14)
>
> > Объявить F: TB в классе TB, из TB1 и TB2 объявление убрать.
>
> - вместо "В" читать "A"


Да. Но TB1 и TB2 - разные классы, хоть и наследники одного. В принципе можно так сделать, но код будет некрасивым, т.е. при реализации классов TA1 и TA2 придется к F обращаться так: TB1(F) и TB2(F) (или (F as TB1) и (F as TB2))

А нельзя ли сделать так чтобы это поле было в родителе, а в наследниках перекрывалось (типа как перекрывают методы с помощью override) ?


 
Жуков Олег   (2006-07-01 22:11) [4]

Вообще public поля не очень правильно использовать.
Сделай у предка свойство типа TB (НЕ ссылающееся на какое либо поле), и абстрактный метод его получения, в наследниках напиши реализацию.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.017 c
15-1151054575
be_love
2006-06-23 13:22
2006.07.23
текст разделить на слова


2-1151770920
pushkin42
2006-07-01 20:22
2006.07.23
Systray


2-1152016679
stud
2006-07-04 16:37
2006.07.23
сохранить текст из 20 richedit в один файл


1-1149598180
newby
2006-06-06 16:49
2006.07.23
Шрифт по умолчанию в создаваемых формах


2-1151949475
HBreaker
2006-07-03 21:57
2006.07.23
Ошибка CoInitialize has not been called





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский