![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перегрузка виртуального метода [D7, WinXP]
kosha © (2005-10-27 14:54:00)Ваше мнение по перегрузке виртуального метода, использование introduce
kosha (2005-10-28 10:37:00) [1]Вот и я про тоже, а мне говорят что это не принципиально и так будет работать. Спасибо за разъяснения.
Сайбель Алексей (2005-10-28 00:24:00) [2]Если тебе нужен именно SetName у своего класса, то перекрывать надо так:
TMyClass = class(TComponent)
procedureSetName( constNewName: TComponentName); override;
...
procedureTMyClass.SetName( constNewName: TComponentName);
begin
inherited; //Если нужно
...
end;
Только зачем перекрывать?
Плохиш (2005-10-27 21:56:00) [3]
> kosha (27.10.05 17:45) [10]
> Я меняю TComponent.SetName на TMyClass.SetName которая делает
> совсем другое действие.Одинаковые имена но разные действия
> (смысловая нагрузка) в классах
У метода TComponent.SetName есть вполне определённая задача, для которой он и был создан. Если Вы мешаете ему выполнять свою задачу, то Вы сам себе злобный буратино. Спрашивается, на кой писать программы, которые пойдут прямиком в корзину?
alex_*** (2005-10-27 18:17:00) [4]если с родительским SetName это никак не связано, то лучше назвать по-другому, а если надо подвязать именно к виртуальному методу родителя, то надо inherited вызвать
Lamer@fools.ua (2005-10-27 18:09:00) [5]>> kosha (27.10.05 17:45) [10]
> Не лучше ли TMyClass.SetName назвать TMyClass.MySetName что бы не пересекаться с родительским классом?
Не то, чтобы лучше. Я бы сказал: надо.
kosha (2005-10-27 17:45:00) [6]Я меняю TComponent.SetName на TMyClass.SetName которая делает совсем другое действие. Одинаковые имена но разные действия (смысловая нагрузка) в классах. Насколько это проблема при использовании библиотек классов? Не лучше ли TMyClass.SetName назвать TMyClass.MySetName что бы не пересекаться с родительским классом?
icWasya (2005-10-27 17:20:00) [7]kosha (27.10.05 16:55) [5]
>Уточняю.
>В классе TComponent есть метод SetName виртуальный.
>Если я в классе наследнике ввожу метод SetName я перекрываю TComponent.SetName
А что имелось в виду, когда Вы это делали???
kosha (2005-10-27 17:15:00) [8]Кроме синтаксического разбора предложений кто - то еще может высказаться. Третий метод (специально повторно посмотрел) you could specify override to make the derived class' procedure also virtual, and thus allowing inherited calls to still reference the original procedure.
Digitman (2005-10-27 17:01:00) [9]
> В классе TComponent есть метод SetName виртуальный
и тебе предлагается его, если нужно, ПЕРКРЫТЬ (override) !!!!!!!!!!!!!!!!!
а не перегрузить (overload) и не перепредставить (reinytroduce) !!!!!!!!!!!!!!!!
> и еще один вариант.
видать, страшно секретный)
kosha (2005-10-27 16:56:00) [10]Мое мнение что перекрывать метод чужого класса не своего это криво, нужно переименовывать, а reintroduce это только для своих классов
kosha (2005-10-27 16:55:00) [11]Уточняю.
В классе TComponent есть метод SetName виртуальный. Если я в классе наследнике ввожу метод SetName я перекрываю TComponent.SetName. Компилятор ругается, а хелп предлагает три варианта решения проблемы: переименовать SetName, использовать reintroduce и еще один вариант.
Digitman (2005-10-27 16:09:00) [12]REintroduce = ПЕРЕпредставить = ВНОВЬ познакомить ..
Цитата из справки :
The reintroduce directive suppresses compiler warnings about hiding previously declared virtual methods. For example,
procedure DoSomething; reintroduce; // the ancestor class also has a DoSomething method
Use reintroduce when you want to hide an inherited virtual method with a new one.
в то же время
OVERload = ПЕРЕгрузка..
Цитата из справки :
A method can be redeclared using the overload directive. In this case, if the redeclared method has a different parameter signature from its ancestor, it overloads the inherited method without hiding it. Calling the method in a descendant class activates whichever implementation matches the parameters in the call
ы ?
Суслик (2005-10-27 15:49:00) [13]аналогичное мнение...
Гаврила (2005-10-27 15:16:00) [14]Мое мнение такое: Вопрос не понятен
kosha (2005-10-27 14:56:00) [15]Sorry, не introduce, а reintroduce