Почему у нас не может быть общих (статических) функций / методов в интерфейсе / абстрактном классе? - PullRequest
6 голосов
/ 01 декабря 2008

В .net нам не разрешено иметь общие функции / методы в абстрактных классах и интерфейсах. Почему они не разрешены?

Это то же самое на других языках. как Java?

Какая может быть потенциальная проблема, если разрешены общие методы?

1 Ответ

12 голосов
/ 01 декабря 2008

Вы, конечно, можете иметь статические (общие) методы в абстрактных классах. Однако их нельзя использовать в интерфейсах.

Похоже, вы действительно хотите виртуальные статические / общие методы - и они недоступны. Статические методы не вызываются полиморфно, и из-за того, как работает большинство .NET, это не имеет большого смысла. Было бы разумно иметь возможность указывать статические методы в интерфейсах при их использовании в качестве ограничений параметров типа - идея, о которой я писал в блоге до сих пор .

Delphi имеет концепцию мета-класса, где (как я понимаю) методы экземпляра в мета-классе класса подобны статическим методам в самом классе - и один мета-класс может быть производным от другого, переопределяя методы и т. д. Я не программист на Delphi, но глава 2 Delphi в двух словах может быть полезна для вас, если вам нужна дополнительная информация.

Java позволяет указывать константы в интерфейсах, но это единственный вид статического члена, поддерживаемого там.

Интересно, что сам CLI позволяет разрешать статические методы в интерфейсе, но это методы с телами, а не только сигнатура, которая предоставляется членами экземпляра интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...