Подтвердить что ты не робот

Методы расширения требуют объявления класса статическим

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

4b9b3361

Ответ 1

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

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

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

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

EDIT: просто чтобы быть ясным, я не предполагаю, что было бы целесообразно иметь методы экземпляра в качестве методов расширения. Я предполагаю, что имеет смысл иметь статический метод расширения во вложенном и/-статический класс.