Методы расширения требуют объявления класса статичным - PullRequest
21 голосов
/ 28 апреля 2010

Почему методы расширения требуют, чтобы объявленный класс был статическим? Это требование компилятора?

1 Ответ

29 голосов
/ 28 апреля 2010

Это продиктовано в спецификации языка, раздел 10.6.9 спецификации C # 4:

Когда первый параметр метода включает модификатор this, который Метод называется расширением метод. Методы расширения могут быть только объявлен в неуниверсальном, не вложенном статические классы. Первый параметр метод расширения может не иметь модификаторы, кроме этого, и тип параметра не может быть указателем типа.

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

Я подозреваю, что дополнительная сложность отсутствия этих ограничений была признана меньшей, чем полученная выгода.

РЕДАКТИРОВАТЬ: Просто чтобы прояснить, я не предполагаю, что было бы целесообразно иметь методы экземпляра в качестве методов расширения - я предполагаю, что было бы целесообразно иметь статический метод расширения во вложенном и / или не класс.

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