![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скрыть public-метод в наследнике.
Alexander Panov © (2005-05-30 20:10:00)Как можно скрыть public-метод в наследнике класса?
К примеру, TStringList имеет 2 метода - Add и AddObject.
Как сделать невидимым для наследника метод Add?
Alexander Panov (2005-05-30 23:11:00) [41]Anatoly Podgoretsky © (30.05.05 23:06) [32]
Кратко опишу задачу:
Наследник от TStrinList используется для хранения списков объектов.
В наследнике объекты можно добавлять только методом AddObject(тоже переписанным).
Anatoly Podgoretsky (2005-05-30 23:06:00) [42]Все таки так и осталось не понятным почему именно хочешь скрыть, ведь вполне достаточно изменить поведение, только надо учитывать и другие методы, например этот метод вызывает Insert который у предка как раз абстрактный, в отличии от Add, также еще есть и ряд других аналогичных методов.
Может надо подумать над перепроектированием? Что то хдесь не то, раз такое потребовалось.
Alexander Panov (2005-05-30 22:59:00) [43]Anatoly Podgoretsky © (30.05.05 22:56) [30]
Да, увы мне-)
Anatoly Podgoretsky (2005-05-30 22:56:00) [44]Ну спрятать невозможно по определению, можно начать новую цепочку наследования.
Alexander Panov (2005-05-30 22:53:00) [45]Ну что же, спасибо всем.
Похоже, что фокус не удастся.
---------
PS.
Гаврила © (30.05.05 22:43) [23]
1 кто будет пользоваться классом - потомком - ты или не ты?
Пользоваться буду я. Но ведь не надо зарекаться-)
Alexander Panov (2005-05-30 22:51:00) [46]К сожаленю, я ошибся - спрятать метод все равно не удалось.
Это возможно только при условии вынесения предка в другой модуль, как я понял.
Anatoly Podgoretsky (2005-05-30 22:50:00) [47]Alexander Panov © (30.05.05 22:42) [22]
Появится в Д7, там это уже не безопасные типы, из-за .NET.
Anatoly Podgoretsky (2005-05-30 22:48:00) [48]Гаврила © (30.05.05 22:43) [23]
function Add(const S: string): Integer; override;
У предка
function Add(const S: string): Integer; virtual;
Defunct (2005-05-30 22:46:00) [49]Alexander Panov © (30.05.05 22:42) [22]
Простите, Warning а не Hint в D7 звучит так:
1 - "Unsafe type PChar"
2 и 3 - "Unsafe type Pointer"
Гаврила (2005-05-30 22:46:00) [50]Если взять именно этот пример (Add, AddObject), то лучше наверно сделать так: переписать метод Add в секции паблик, но добавиьт параметр (сделать так же, как и в AddObject) (если например в стринг листе не должно оказаться итемов без обжектов)
Гаврила (2005-05-30 22:43:00) [51]Саш, хинт - не проблема, его можно погасить соответствующей директивой
{$HINTS OFF}
Я не совсем пойму - зачем это надо
2 Вопроса
1 кто будет пользоваться классом - потомком - ты или не ты?
2. метод статический или виртуальнй?
Alexander Panov (2005-05-30 22:42:00) [52]Defunct © (30.05.05 22:40) [21]
Странно, у меня нет хинта ни в одном из 3-х примеров.
(D6)
Defunct (2005-05-30 22:40:00) [53]Alexander Panov © (30.05.05 22:21) [20]
const
Someconst : PChar = 'А вот и хинт';
type
TSomerecord = Record
Addr : Pointer; // А вот и второй хинт
...
End;
Someproc = Procedure(Addr:Pointer); // третий хинт
Могу привести еще
Alexander Panov (2005-05-30 22:21:00) [54]Defunct © (30.05.05 22:09) [19]
Приведи пример, в которм хинты выдаются?
Defunct (2005-05-30 22:09:00) [55]Alexander Panov © (30.05.05 21:49) [18]
А как же ж удается используя Pointer и PChar избегать всех hint'ов?
Alexander Panov (2005-05-30 21:49:00) [56]Defunct © (30.05.05 21:46) [17]
Использую, конечно.
Defunct (2005-05-30 21:46:00) [57]Alexander Panov © (30.05.05 21:44) [16]
Ясно, значит дело принципа ;>
и Pointer вы никогда не используете и PChar?
Alexander Panov (2005-05-30 21:44:00) [58]Defunct © (30.05.05 21:41) [14]
Ой ли, а не пофигу на тот хинт?
BFG9k © (30.05.05 21:43) [15]
Дался тебе этот хинт. Хинты - обычное дело. Например при любом использовании PChar дельфи ругается - unsafe type. У нас своя голова за плечами :)
У меня перед релизом не остается хинтов в программе.
BFG9k (2005-05-30 21:43:00) [59]
> В принципе, если перенести метод в private-секцию, как заглушку
> и использовать при вызове, например, конструктора, то хинт
> выдаваться не будет
Дался тебе этот хинт. Хинты - обычное дело. Например при любом использовании PChar дельфи ругается - unsafe type. У нас своя голова за плечами :)
Defunct (2005-05-30 21:41:00) [60]Извиняюсь за возможную грубость.
> В этом случае цель достигается, но получаем хинт
Ой ли, а не пофигу на тот хинт?