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

Вниз

Зачем такое объявление класса?   Найти похожие ветки 

 
Iconka ©   (2004-09-29 17:21) [0]

Смотрю исходники RxLib, вижу такую строчку в файле RxGrids:


type
 TWinControlCracker = class(TWinControl);


Зачем такое?


 
MBo ©   (2004-09-29 17:30) [1]

чтобы получить доступ к защищенным свойствам


 
olookin ©   (2004-09-29 17:33) [2]

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

type
TWinControlCracker = class(TWinControl);

type
TMyClass = class
   public
      WCC: TWinControlCracker ;
 end;

type
TWinControlCracker = class(TWinControl)
   public
   private
 end;

А теперь к мастерам... Я прав или неправ?


 
Iconka ©   (2004-09-29 17:36) [3]


> это используется для предварительной декларации класса

Дальше в модуле TWinControlCracker не встречается. Это его единственное упоминание.


> чтобы получить доступ к защищенным свойствам

Каким образом?


 
olookin ©   (2004-09-29 17:37) [4]

[3] Iconka ©   (29.09.04 17:36)

В таком случае я неправ. Хотя мне такое описание встречалось именно в том случае, как показано на примере...


 
debuger ©   (2004-09-29 17:51) [5]

Путем прямого наследование. Это ж основные засады ООП.


 
Sandman25 ©   (2004-09-29 17:57) [6]

Это не засады ООП, а лень разработчиков приложений, которым неохота писать нормального наследника и устанавливать его в палитру компонент.


 
Iconka ©   (2004-09-29 17:57) [7]

Все равно к protected полям доступ не получишь....


 
Внук ©   (2004-09-29 17:57) [8]

Простым образом. Наследник имеет доступ к защищенным методам предка. Вот этого наследника и создали.


 
Внук ©   (2004-09-29 17:59) [9]

Почему не получишь?


 
Iconka ©   (2004-09-29 18:00) [10]

По теории :)
К protected можно получить если наследник в том же модуле находится.


 
Iconka ©   (2004-09-29 18:00) [11]

По теории :)
К protected можно получить если наследник в том же модуле находится.


 
Внук ©   (2004-09-29 18:03) [12]

Ой. А я всегда получал, потому что не знал, что нельзя. А если в том же модуле, я, извиняюсь, и к private получу.


 
Iconka ©   (2004-09-29 18:07) [13]


> Внук ©   (29.09.04 18:03) [12][Ответить]

Вы правы...
:)


 
jack128 ©   (2004-09-29 18:23) [14]

Iconka ©   (29.09.04 17:36) [3]
Дальше в модуле TWinControlCracker не встречается. Это его единственное упоминание.


Очень маловероятно. Объявление кряк-класса нужно для вот таких манипуляций:
unit Forms;
...

type
 TMenuItemAccess = class(TMenuItem);

procedure TCustomForm.WndProc(var Message: TMessage);
..
begin
...

 TMenuItemAccess(MenuItem).MeasureItem(Canvas,
   Integer(itemWidth), Integer(itemHeight));
...
end;

end;


 
Cobalt ©   (2004-09-29 23:04) [15]

Хм... действительно есть:
type
 TWinControlCracker = class(TWinControl);

procedure TRxInplaceEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
 if (EditStyle = ieEllipsis) and (Key = VK_RETURN) and (Shift = [ssCtrl]) then
 begin
   TRxDrawGrid(Grid).EditButtonClick;
   KillMessage(Handle, WM_CHAR);
 end
 else inherited KeyDown(Key, Shift);
end;


И нигде больше не используется...


 
olookin ©   (2004-09-29 23:49) [16]

Такя прав?


 
jack128 ©   (2004-09-30 01:09) [17]

olookin ©   (29.09.04 23:49) [16]
нет. то что имеешь виду длается так:

TSameClass = class; // отметь - мы не указываем предка!! Только говорил, что есть такое класс TSameClass, но про него (кроме того, что это класс) еще ничего не известно.
TSameOtherClass = class(TObject)
 FObj: TSameClass;
end;

TSameClass = class(TWinControl);  - а вот тут мы уже объявляем класс, добовляем новые методы, если нужно и тд..


 
jack128 ©   (2004-09-30 01:16) [18]

jack128 ©   (30.09.04 1:09) [17]
olookin ©   (29.09.04 23:49) [16]
нет. то что имеешь виду делается так:

TSameClass = class; // отметь - мы не указываем предка!! Только говорим, что есть такой класс TSameClass, но про него (кроме того, что это класс) еще ничего не известно.
TSameOtherClass = class(TObject)
FObj: TSameClass;
end;

TSameClass = class(TWinControl);  - а вот тут мы уже объявляем класс, добавляем новые методы, если нужно и тд..

сорри


 
Гаврила ©   (2004-09-30 01:47) [19]


>  TWinControlCracker


Дурное какое название, однако.... не так надо называть


 
jack128 ©   (2004-09-30 01:52) [20]

Гаврила ©   (30.09.04 1:47) [19]
Почему?? Я подобные классы вот так называю:

type
 TReaderCrack = class(TReader);
 TWriterCrack = class(TWriter);
 TPersistentCrack = class(TPersistent);


 
GuAV ©   (2004-09-30 02:25) [21]

TXControl - eXpose Control"s properties :)


 
Гаврила ©   (2004-09-30 02:27) [22]


> [20] jack128 ©   (30.09.04 01:52)


да слово кривое какое-то :-)

я такие классы называю типа
TReaderAccess = class(TReader);


 
KSergey ©   (2004-09-30 11:09) [23]

Ну раз уж пошла перепись - то я T..Friend  ;)
Впрочем как не назови - один фиг ;)

> [6] Sandman25 ©   (29.09.04 17:57)
> Это не засады ООП, а лень разработчиков приложений, которым
> неохота писать нормального наследника и устанавливать его
> в палитру компонент.

При чем тут лень? Просто в таких случаях и нафиг не надо совершенно наследника полноценного создавать, да еще и в палитру - это уж совсем что-то странное вы батенька брякнули...


 
Sandman25 ©   (2004-09-30 11:44) [24]

[23] KSergey ©   (30.09.04 11:09)

Обычно такой приемчик используется с гридами, когда написание полнофункционального наследника было бы лучше.
В данном случае с WinControlCracker Вы правы, компонент в палитру не добавить :)


 
KSergey ©   (2004-09-30 12:01) [25]

> [24] Sandman25 ©   (30.09.04 11:44)
> Обычно такой приемчик используется с гридами

Не факт


 
Sandman25 ©   (2004-09-30 12:08) [26]

[25] KSergey ©   (30.09.04 12:01)

Я видел, как такой прием использовался с гридами в таком контексте, когда напрашивался наследник. Теперь факт? :)


 
KSergey ©   (2004-09-30 12:14) [27]

Ну если это принципиально - факт ;)



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

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

Наверх




Память: 0.53 MB
Время: 0.048 c
8-1090659762
DarkAvenger
2004-07-24 13:02
2004.10.17
тег mp3 файла


4-1095434702
AdmeraL
2004-09-17 19:25
2004.10.17
справочник WinApi


14-1096441436
Kerk
2004-09-29 11:03
2004.10.17
Курсовой проект


14-1096310610
lipskiy
2004-09-27 22:43
2004.10.17
Ё-маё! да что ж за фигня такая! ну подскажите же что неверно?


8-1090665707
cherrex
2004-07-24 14:41
2004.10.17
Генератор звуковых частот