Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
ВнизПерегрузка виртуального метода Найти похожие ветки
← →
kosha (2005-10-27 14:54) [0]Ваше мнение по перегрузке виртуального метода, использование introduce
← →
kosha (2005-10-27 14:56) [1]Sorry, не introduce, а reintroduce
← →
Гаврила © (2005-10-27 15:16) [2]Мое мнение такое: Вопрос не понятен
← →
Суслик © (2005-10-27 15:49) [3]аналогичное мнение...
← →
Digitman © (2005-10-27 16:09) [4]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
ы ?
← →
kosha (2005-10-27 16:55) [5]Уточняю.
В классе TComponent есть метод SetName виртуальный. Если я в классе наследнике ввожу метод SetName я перекрываю TComponent.SetName. Компилятор ругается, а хелп предлагает три варианта решения проблемы: переименовать SetName, использовать reintroduce и еще один вариант.
← →
kosha (2005-10-27 16:56) [6]Мое мнение что перекрывать метод чужого класса не своего это криво, нужно переименовывать, а reintroduce это только для своих классов
← →
Digitman © (2005-10-27 17:01) [7]
> В классе TComponent есть метод SetName виртуальный
и тебе предлагается его, если нужно, ПЕРКРЫТЬ (override) !!!!!!!!!!!!!!!!!
а не перегрузить (overload) и не перепредставить (reinytroduce) !!!!!!!!!!!!!!!!
> и еще один вариант.
видать, страшно секретный)
← →
kosha (2005-10-27 17:15) [8]Кроме синтаксического разбора предложений кто - то еще может высказаться. Третий метод (специально повторно посмотрел) you could specify override to make the derived class" procedure also virtual, and thus allowing inherited calls to still reference the original procedure.
← →
icWasya © (2005-10-27 17:20) [9]kosha (27.10.05 16:55) [5]
>Уточняю.
>В классе TComponent есть метод SetName виртуальный.
>Если я в классе наследнике ввожу метод SetName я перекрываю TComponent.SetName
А что имелось в виду, когда Вы это делали???
← →
kosha (2005-10-27 17:45) [10]Я меняю TComponent.SetName на TMyClass.SetName которая делает совсем другое действие. Одинаковые имена но разные действия (смысловая нагрузка) в классах. Насколько это проблема при использовании библиотек классов? Не лучше ли TMyClass.SetName назвать TMyClass.MySetName что бы не пересекаться с родительским классом?
← →
Lamer@fools.ua © (2005-10-27 18:09) [11]>>kosha (27.10.05 17:45) [10]
>Не лучше ли TMyClass.SetName назвать TMyClass.MySetName что бы не пересекаться с родительским классом?
Не то, чтобы лучше. Я бы сказал: надо.
← →
alex_*** (2005-10-27 18:17) [12]если с родительским SetName это никак не связано, то лучше назвать по-другому, а если надо подвязать именно к виртуальному методу родителя, то надо inherited вызвать
← →
Плохиш © (2005-10-27 21:56) [13]
> kosha (27.10.05 17:45) [10]
> Я меняю TComponent.SetName на TMyClass.SetName которая делает
> совсем другое действие. Одинаковые имена но разные действия
> (смысловая нагрузка) в классах
У метода TComponent.SetName есть вполне определённая задача, для которой он и был создан. Если Вы мешаете ему выполнять свою задачу, то Вы сам себе злобный буратино. Спрашивается, на кой писать программы, которые пойдут прямиком в корзину?
← →
Сайбель Алексей © (2005-10-28 00:24) [14]Если тебе нужен именно SetName у своего класса, то перекрывать надо так:
TMyClass = class(TComponent)
procedure SetName(const NewName: TComponentName); override;
...
procedure TMyClass.SetName(const NewName: TComponentName);
begin
inherited;//Если нужно
...
end;
Только зачем перекрывать?
← →
kosha (2005-10-28 10:37) [15]Вот и я про тоже, а мне говорят что это не принципиально и так будет работать. Спасибо за разъяснения.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c