AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.07.2003, 12:29   #1  
Антон Солдатов is offline
Антон Солдатов
Соучастник
Аватар для Антон Солдатов
 
386 / 27 (1) +++
Регистрация: 29.12.2002
Адрес: Новосибирск
Angry БАГА: Модификаторы методов
версия 3.0.
при попытке скомпилировать следующее:
PHP код:
final static void noChange(){
   
info("ы!");

компилятор ругается: "Заданы конфликтующие модификаторы видимости", хотя я не понимаю, каким образом final и static конфликтуют между собой. да и в рук-ве разработчика есть аналогичный пример использования этих модификаторов. any ideas?
Старый 01.07.2003, 14:01   #2  
Антон Солдатов is offline
Антон Солдатов
Соучастник
Аватар для Антон Солдатов
 
386 / 27 (1) +++
Регистрация: 29.12.2002
Адрес: Новосибирск
ЭПИЗОД II
это тоже не компилируется:

PHP код:
public class Parent{
   public static 
void method1(){
       
Parent::method2();
   }

   static 
void method2(){ info("ы!"); }
   
}

public class 
Child extends Parent{
 
  static 
void method2(){ info("ку!"); }
 
  static 
void Main(Args args){
      
Child::method1();
   }

говорит нету такого метода!
то же мне ООП.
Старый 01.07.2003, 18:15   #3  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Я уже давненько не перечитывал ARM Страуструпа, но боюсь что в C++ тебя постигнет такая же неудача с этими конструкциями.

Модификатор final (его то как раз C++ нету, это из Java пришло) имеет смысл только для методов экземпляра, поскольку механизм "виртуализации" методов для статических методов не применим, так как они вызываются не в контексте экземпляра, соответственно у компилятора нет доступа к таблице виртуальных методов, привязываемой к экземпляру.

При вызове статического метода класса, нужно указывать именно тот класс в котором этот метод определен, то есть вызов child:arentMethod() не имеет смысла.
В дочерних классах наследуются только методы экземпляра (не статические).
Старый 02.07.2003, 05:19   #4  
Антон Солдатов is offline
Антон Солдатов
Соучастник
Аватар для Антон Солдатов
 
386 / 27 (1) +++
Регистрация: 29.12.2002
Адрес: Новосибирск
Цитата:
Изначально опубликовано fed
Я уже давненько не перечитывал ARM Страуструпа, но боюсь что в C++ тебя постигнет такая же неудача с этими конструкциями.

Модификатор final (его то как раз C++ нету, это из Java пришло) имеет смысл только для методов экземпляра, поскольку механизм "виртуализации" методов для статических методов не применим, так как они вызываются не в контексте экземпляра, соответственно у компилятора нет доступа к таблице виртуальных методов, привязываемой к экземпляру.

При вызове статического метода класса, нужно указывать именно тот класс в котором этот метод определен, то есть вызов child:arentMethod() не имеет смысла.
В дочерних классах наследуются только методы экземпляра (не статические).
аргумент 1: несмотря на все Ваши слова, в Java статические методы наследуются, поэтому final имеет смысл.

аргумент 2: более того, final static void method_name - приводится в руководстве разработчика Axapta как правильный пример.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Бага в сопоставлении «Максимальная переплата или недоплата». Starling DAX: Функционал 1 03.04.2009 17:16
Последовательность вызовов методов HorrR DAX: Программирование 3 10.04.2008 19:18
Бага во внешнем польском складе Андре DAX: Функционал 0 24.03.2008 10:14
Динамическое создание методов. Ratmir DAX: База знаний и проекты 19 18.08.2004 09:13
Исполнение методов класса на стороне сервера (AOS)? SnowMan DAX: Программирование 11 28.08.2003 16:15

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:30.