Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.07.2009, 17:16
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос Вопрос о классах и наследовании...

Здравствуйте, подскажите пожалуйста как можно скрыть некоторые процедуры, функции и свойства выборочно при наследовании ?
например у нас есть класс:
type
Код:
 TClassFirst = class
 private
 FBol:Boolean;
 Function FGetTestProperty:Boolean; 
 Procedure FSetTestProperty(Val:Boolean);
public
 Property TestProperty:Boolean read FGetTestProperty write FSetTestProperty;
end;

 TClassSecond = class(TClassFirst)
 end;
например был у нас класс TClassFirst, мы от него наследовали новый класс TClassSecond и нам нужно, чтобы в нашем новом классе например не было такого свойства как TestProperty..
так же ещё как можно скрыть функции, процедуры, которые доступны всем, т.е. которые находятся в public и свойства в published.
Подскажите пожалуйста...
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
  #2  
Старый 11.07.2009, 19:00
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Согласно справке, вы не можете понижать «степень видимости» членов класса.
Цитата:
You can increase the visibility of a member in a descendant class by redeclaring it, but you cannot decrease its visibility. For example, a protected property can be made public in a descendant, but not private. Moreover, published members cannot become public in a descendant class. For more information, see Property overrides and redeclarations
Кстати, можете просмотреть эту самую тему в справке «Property overrides and redeclarations»
В частности, там написано, что хотя вы и не можете сделать свойство менее видимым, но вы можете перекрыть его и изменить процедуры чтения и записи свойства.
Ответить с цитированием
  #3  
Старый 11.07.2009, 19:11
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Сообщение Спасибо

Спасибо за ответ, очень жаль конечно, что такое невозможно
__________________
Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей
Ответить с цитированием
  #4  
Старый 11.07.2009, 20:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

напрямую - невозможно. А в обход - сколько влезет:

Код:
type
  TBaseClass = class
  protected
     property p1 : integer read ... write ...;
     property p2 : integer read ... write ...;
  end;
  
  TFirstClass = class(TBaseClass)
  public
    property p1; // Показали 
  end;

  TSecondClass = class(TBaseClass);
  public
    property p2; // Показали
  end;

С методами такое не пройдет, но можно сделать просто заглушки, вызывающие protected-методы в соотв. наследниках.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter