Это продиктовано в спецификации языка, раздел 10.6.9 спецификации C # 4:
Когда первый параметр метода
включает модификатор this, который
Метод называется расширением
метод. Методы расширения могут быть только
объявлен в неуниверсальном, не вложенном
статические классы. Первый параметр
метод расширения может не иметь
модификаторы, кроме этого, и
тип параметра не может быть указателем
типа.
Мне непонятно, почему все из этих ограничений необходимы - кроме потенциально для простоты компилятора (и спецификации языка). Я понимаю, почему имеет смысл ограничивать его неуниверсальными типами, но я не могу сразу понять, почему они должны быть не вложенными и статичными. Я подозреваю, что это значительно упрощает правила поиска, если вам не нужно беспокоиться о типах, содержащихся в текущем типе и т. Д., Но я осмелюсь сказать, что это будет возможно.
Я подозреваю, что дополнительная сложность отсутствия этих ограничений была признана меньшей, чем полученная выгода.
РЕДАКТИРОВАТЬ: Просто чтобы прояснить, я не предполагаю, что было бы целесообразно иметь методы экземпляра в качестве методов расширения - я предполагаю, что было бы целесообразно иметь статический метод расширения во вложенном и / или не класс.