Форум: "Основная";
Текущий архив: 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.049 c