Почему методы расширения требуют, чтобы класс объявления был статическим? Это требование компилятора?
Методы расширения требуют объявления класса статическим
Ответ 1
Он продиктовал спецификацию языка, раздел 10.6.9 спецификации С# 4:
Когда первый параметр метода включает этот модификатор, который метод называется расширением метод. Методы расширения могут объявлен в не общих, не вложенных статические классы. Первый параметр метод расширения не может кроме этого, и тип параметра не может быть указателем тип.
Мне непонятно, почему все эти ограничения необходимы - кроме потенциально для простоты компилятора (и языка). Я понимаю, почему имеет смысл ограничивать его не-генерическими типами, но я не могу сразу понять, почему они должны быть не вложенными и статичными. Я подозреваю, что правила поиска значительно упрощаются, если вам не нужно беспокоиться о типах, содержащихся в текущем типе и т.д., Но я осмелюсь сказать, что это будет возможно.
Я подозреваю, что дополнительная сложность отсутствия этих ограничений была меньше, чем полученная выгода.
EDIT: просто чтобы быть ясным, я не предполагаю, что было бы целесообразно иметь методы экземпляра в качестве методов расширения. Я предполагаю, что имеет смысл иметь статический метод расширения во вложенном и/-статический класс.