Почему у нас не может быть общих (статических) функций / методов в интерфейсе / абстрактном классе?
В.net нам не разрешено иметь общие функции / методы в абстрактных классах и интерфейсах. Почему они не разрешены?
Это то же самое на других языках. как Java?
В чем может быть потенциальная проблема, если разрешены общие методы?
1 ответ
Конечно, вы можете иметь статические (общие) методы в абстрактных классах. Вы не можете иметь их в интерфейсах, однако.
Похоже, вам действительно нужны виртуальные статические / общие методы - а они недоступны. Статические методы не вызываются полиморфно, и с учетом того, как работает большинство.NET, это не имеет большого смысла. Было бы разумно иметь возможность указывать статические методы в интерфейсах при их использовании в качестве ограничений параметров типа - идея, о которой я писал в блоге раньше.
В Delphi есть концепция метакласса, где (как я понимаю) методы экземпляра в метаклассе класса подобны статическим методам в самом классе - и один метакласс может быть производным от другого, переопределяя методы и т. Д. Я Я не программист Delphi, но глава 2 Delphi в двух словах может быть полезна для вас, если вы хотите получить больше информации.
Java позволяет указывать константы в интерфейсах, но это единственный поддерживаемый тип статического члена.
Интересно, что сам CLI допускает статические методы в интерфейсе, но это методы с телами, а не только сигнатура, предоставляемая членами экземпляра интерфейса.