Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

Поменять область видимости метода   Найти похожие ветки 

 
Bless   (2003-06-26 10:59) [0]

Всем привет!
Сразу извиняюсь за возможно глупый вопрос.
Можно ли private-метод класса-предка сделать public в классе-потомке(для свойств же можно)?
Можно, конечно, его перекрыть

class TMyClass
...
public
procedure Metod;
...
end;

procedure Metod;
begin
inherited Metod;
end

но выглядит как-то косолаповато.


 
Юрий Федоров ©   (2003-06-26 11:01) [1]

Вроде метод нельзя, можно только свойство


 
Skier ©   (2003-06-26 11:02) [2]

>Bless (26.06.03 10:59)

> Можно ли private-метод класса-предка сделать public в классе-потомке

Можно, если эти классы в одном модуле, в противном
случае выноси методы в предке в секцию protected


 
Skier ©   (2003-06-26 11:05) [3]

Shit. Поторопился ! Мои извинения...


 
Bless   (2003-06-27 10:01) [4]

Я перепутал, метод не private, а protected.

>Skier © (26.06.03 11:05)
>Shit. Поторопился ! Мои извинения...

То есть нельзя сделать public?


 
Zemal ©   (2003-06-27 11:07) [5]

Можно выкрутиться таким макаром и получить доступ ко всем закрытым методам объекта:

type
TFakeField = class(TField);

...
TFakeField(FieldByName("Buy")).SetDataType(ftCurrency);
{
мне позарез нужно было изменить тип данных у поля, но свойство DataType оказывается только для чтения, а функция SetDateType описана в разделе protected... :(( как известно к функциям из этого раздела можно получить доступ только из объекта класса потомка, описанного в этом же юните(!!!)... вот я и описал фиктивный класс и использовал приведение типов :))... в результате получил доступ ко всем сокрытым методам... только сам понимаешь чем это может обернуться, так что используй с умом :))
}
...

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


 
Юрий Федоров ©   (2003-06-27 11:13) [6]

>>Bless (27.06.03 10:01)
Можно как ты написал. Другое дело, что какая-то странная ситуация, наверно что-то неправильно спроектировано, отсюда и "косолапость"


 
Zemal ©   (2003-06-27 11:14) [7]

Может я не в тему??? :)) С утра ещё не проснулся :)).


 
Семен Сорокин ©   (2003-06-27 11:17) [8]

Zemal © (27.06.03 11:07)
ко всем закрытым методам объекта
уточнение - ко всем protected методам объекта


 
Zemal ©   (2003-06-27 11:21) [9]

Сёма Сорокин >> ты прав как никогда :)) спасибо за поправку :)) только мне кажется будут доступны и private тоже :)), т.е. не останется недоступных методов :)). Может я ошибаюсь?


 
Семен Сорокин ©   (2003-06-27 11:25) [10]

Zemal © (27.06.03 11:21)
если твои изменения будут находиться в модуле, где объявлен класс TField, то тогда будут доступны и private- методы, иначе - только protected


 
Zemal ©   (2003-06-27 11:37) [11]

Семён, ты посмотри и протестируй мой примерчик :)). Сам увидишь что доступны ВСЕ методы, т.к. класс получается вроде бы как объявленным в ЭТОМ(!!!) юните :)), т.к. используется приведение к классу: TFakeField(FieldByName("Buy"))


 
Семен Сорокин ©   (2003-06-27 11:51) [12]

Zemal © (27.06.03 11:37)
признаю, неправ :))


 
Zemal ©   (2003-06-27 12:04) [13]

Семён >> Теперь будешь знать как обуть все ограничения и обойти все области видимости :))


 
Юрий Федоров ©   (2003-06-27 12:11) [14]

>>Zemal
Ты хочешь сказать, что
TFakeField(FieldByName("Buy")).FFieldName:="";
откомпилируется?
Если так, то полные чудеса творятся.
Если конечно мы не вносим исправления в модуль DB.pas



 
Семен Сорокин ©   (2003-06-27 12:17) [15]

Юрий Федоров © (27.06.03 12:11)
точно, а я смотрел в Evaluate/Modify


 
Семен Сорокин ©   (2003-06-27 12:18) [16]

знал же, что сто-то здесь не так :)))


 
Zemal ©   (2003-06-27 12:21) [17]

А чего не так??? Всё так :)).

Юрий Федоров © (27.06.03 12:11)
Именно откомпилируется :)). И будет работать :)). Проверь :)).


 
Юрий Федоров ©   (2003-06-27 12:23) [18]

>>Zemal © (27.06.03 12:21)
Ну так я же проверил прежде чем писать :-)


 
Zemal ©   (2003-06-27 12:28) [19]

Эта фишка используется часто программистами Борланд в некоторых стандартных юнитах с описаниями некоторых базовых классов :)). Неужели не встречали??? Только они это намеренно не документируют, и более того, тщательно скрывают :)). И понятно для чего :)). Но сами активно используют :)). Во гады!!! Да???


 
Семен Сорокин ©   (2003-06-27 12:28) [20]

2Zemal
воду взбаламутил, может тебе все-таки доспать еще надо Zemal © (27.06.03 11:14) :)))


 
Семен Сорокин ©   (2003-06-27 12:30) [21]

Zemal © (27.06.03 12:28)
может директивку какую надо, чтобы откомпилировалось?


 
Юрий Федоров ©   (2003-06-27 12:36) [22]

>>Zemal
Ты путаешь доступ к protected и к private.
Для чего, по твоему, пишут такие статьи :
http://www.delphimaster.ru/articles/callprivate/index.html


 
Zemal ©   (2003-06-27 12:53) [23]

Семен Сорокин >> аха :)) нужно доспать :)) но недают, понимаешь...


 
Zemal ©   (2003-06-27 12:56) [24]

Юрий Федоров >> Ты хочешь сказать что методы объявленные в protected доступны небудут???


 
Семен Сорокин ©   (2003-06-27 12:56) [25]

Zemal © (27.06.03 12:53)
так все же вот этот код компилируется?
TFakeField(FieldByName("Buy")).FFieldName:="";


 
Юрий Федоров ©   (2003-06-27 13:00) [26]

>>Zemal © (27.06.03 12:56)
Издеваешься ? Наоборот :-)
Не, точно издеваешься


 
Семен Сорокин ©   (2003-06-27 13:00) [27]

Юрий Федоров © (27.06.03 13:00)
он не выспался :))


 
Zemal ©   (2003-06-27 13:00) [28]

Семен Сорокин >> Скомпилируется :))

Юрий Федоров >> А ведь точно... ты прав... всё что объявлено в protected недоступно :((... только private... я торможу, блин... надо лучше спать, а не в Unreal по ночам гонять :))


 
Семен Сорокин ©   (2003-06-27 13:02) [29]

Zemal © (27.06.03 13:00)
может наоборот?


 
Zemal ©   (2003-06-27 13:11) [30]

Семен Сорокин >> Блин, ну наоборот!!! Да какая разница??? Пусть будет так как есть :))... мда-а-а-а... чувствую напишу я сегодня новый проект... как бы я чего не запорол... ещё Ораклу щас подвешу, или ещё хуже до бэкапа дело дойдёт :)) тьфу-тьфу-тьфу



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

Текущий архив: 2003.07.10;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.022 c
14-31439
BaRToV
2003-06-21 02:40
2003.07.10
Как будет выглядить ASM втавка:


14-31470
Den
2003-06-24 11:56
2003.07.10
1 запрос к 2 БД?


3-31087
ss300
2003-06-16 08:31
2003.07.10
помогите с sql запросом


14-31506
qwerty335@yandex.ru
2003-06-25 07:44
2003.07.10
Функция перехвата открывания Floppy диска


4-31566
Forest
2003-05-11 15:47
2003.07.10
findwindow( tedit , edit1 ) не работает...