Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi2010] property родителей 
:(
    Опции темы
CROTishka
Дата 25.11.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



просветите пожалуйста, теперь что, все проперти родителя автоматом пробрасываются в потомка? 
раньше же вроде надо было их явно прописывать в виде
Код

 published
    property Action;
    .....
    property Visible;
  end;

Как отрубить у потомка эти свойства? (чтобы в проперти эдиторе не отображались, и в менять/видеть нельзя было). спасибо.

Это сообщение отредактировал(а) CROTishka - 25.11.2010, 15:32
PM MAIL   Вверх
cat512
Дата 25.11.2010, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



Цитата(CROTishka @ 25.11.2010,  12:01)
просветите пожалуйста, теперь что, все проперти родителя автоматом пробрасываются в потомка? 
раньше же вроде надо было их явно прописывать в виде
Код

 published
    property Action;
    .....
    property Visible;
  end;

Как отрубить у потомка эти свойства? (чтобы в проперти эдиторе не отображались, и в коде менять/видеть нельзя было). спасибо.

Что значит автоматом пробрасываются в потомках? В ООП существует концепция наследования объектов, которая строго определяет контент класса-предка в наследниках, т.е. если у предка имелось какое либо свойство, то оно должно быть и в классе наследнике. (вопрос с доступом переносим в другую плоскость)
Скрыть свойство можно перенеся его в нужную секцию (protected, private). Соответственно скрывать нужно у предка, что-бы оно было не доступно в наследнике. Скрыть только для инспектора объектов, достатосно перенести свойство в секцию public

Это сообщение отредактировал(а) cat512 - 25.11.2010, 15:24
PM MAIL   Вверх
CROTishka
Дата 25.11.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



Я не то имел в виду. Я имел в виду что раньше если не прописать проперти в паблишед, то они не были видны в проперти эдиторе.
PM MAIL   Вверх
cat512
Дата 25.11.2010, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



А сейчас подругому? Я просто работаю под 6-7, возможно в новых версиях уже чего-то накрутили smile
PM MAIL   Вверх
CROTishka
Дата 25.11.2010, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



Да, сейчас в 2010 проперти видны все, в независимости от визибилити и указаны ли они явно.
PM MAIL   Вверх
БелАмор
Дата 25.11.2010, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 5
Всего: 17



Цитата(CROTishka @  25.11.2010,  18:27 Найти цитируемый пост)
Да, сейчас в 2010 проперти видны все, в независимости от визибилити и указаны ли они явно.

На основании чего сделан такой вывод?
Вы явно что-то путаете.
Я не имел дела с Delphi выше 2006, но не думаю, что там что-то принципиально изменилось. Так что давайте разбираться. Начнём с самого начала.
private - видимость только в этом классе, в наследниках недоступно.
protected - видимость в этом классе и всех потомках.
public - доступно всем
published - доступно всем, сохраняется в dfm, выводится в инспектор объектов.
Если спецификатор видимости не указан - это published
Обычно в базовом классе свойства объявляются как protected. При этом они объявляются с read/write методами. В потомках свойства, которым нужно повысить видимость, указываются в секции public или published без указания методов чтения/записи. Это трактуется как изменение видимости ранее объявленного свойства. Понижать видимость не принято. Некоторые свойства изначально могут объявляться как published, тогда в наследниках нет необходимости увеличивать их видимость
Пример:
Код

  TControl = class(TComponent)
  private
    function GetText: TCaption;
    procedure SetText(const Value: TCaption);
  protected
    property Caption: TCaption read GetText write SetText stored IsCaptionStored;
  end;

  TCustomForm = class(TScrollingWinControl)
  private
    function GetMDIChildCount: Integer;
  protected
    property MDIChildCount: Integer read GetMDIChildCount;
  end;

  TForm = class(TCustomForm)
  public
    property MDIChildCount;
  published
    property Caption;
  end;

Посмотрите конкретно эти свойства в своей Delphi 2010. Вряд ли там что-то должно сильно измениться конкретно с Caption и MDIChildCount.
Если у вас в инспекторе объектов отображаются какие-то свойства, которые отображаться не должны, приведите конкретный пример.
PM   Вверх
CROTishka
Дата 26.11.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



Спасибо большое, я понял в чём соль. 
И всё-таки, их можно как-то скрыть, после того уже, как они объявлены с видимостью паблишед?

Это сообщение отредактировал(а) CROTishka - 26.11.2010, 11:58
PM MAIL   Вверх
БелАмор
Дата 26.11.2010, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 5
Всего: 17



Цитата(CROTishka @  26.11.2010,  09:43 Найти цитируемый пост)
И всё-таки, их можно как-то скрыть, после того уже, как они объявлены с видимостью паблишед?

При попытке понизить в потомках видимость чего-либо, в действие вступают достаточно неочевидные механизмы. Поэтому, даже если это и можно сделать, я бы советовал принять как асиому и неукоснительно выполнять правило:
В наследниках видимость можно только повышать, и ни при каких обстоятельствах не следует пытаться её понижать.

Что касается возможности не отображать в инспекторе объектов часть свойств, то я смутно припоминаю, что встречал упоминание о том, что в какой-то из последних версий Delphi вроде бы появилась возможность настройки видимости свойств в самом инспекторе объектов. Так ли это, и если так, то как реализуется и насколько это полезно - сказать не могу.
PM   Вверх
AnalogXP
Дата 26.11.2010, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 23.9.2007

Репутация: нет
Всего: нет



PM MAIL   Вверх
CROTishka
Дата 3.12.2010, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



я помнится пару лет назад долго тупил, когда увидел в коде изменение константы. как же удивятся люди когда увидят доступ к strict private.
интересная тема, но не совсем то.

Это сообщение отредактировал(а) CROTishka - 3.12.2010, 17:13
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.