Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.043 c
1-1096621361
-=Evgen=-
2004-10-01 13:02
2004.10.17
Как построить вертикальный график в Fast Report


1-1096396109
shrek
2004-09-28 22:28
2004.10.17
Как сделать нормальное табулирование по edit ам?


1-1097039937
qwe
2004-10-06 09:18
2004.10.17
Проблема с установкой EhLib 3.5 Components


14-1096479211
Sheng
2004-09-29 21:33
2004.10.17
Посоветуйте, что выбрать


3-1095738490
N
2004-09-21 07:48
2004.10.17
MyArray





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский