c# - metodos - Los métodos de extensión requieren declarar que la clase es estática
clases y metodos en c# (1)
¿Por qué los métodos de extensión requieren que la clase declarante sea estática? ¿Es un requisito del compilador?
Está dictado en la especificación de lenguaje, sección 10.6.9 de la especificación C # 4:
Cuando el primer parámetro de un método incluye este modificador, se dice que ese método es un método de extensión. Los métodos de extensión solo se pueden declarar en clases estáticas no genéricas, no anidadas. El primer parámetro de un método de extensión no puede tener otros modificadores, y el tipo de parámetro no puede ser un tipo de puntero.
No me queda claro por qué todas estas restricciones son necesarias, aparte de la simplicidad potencial del compilador (y las especificaciones de idioma). Puedo ver por qué tiene sentido restringirlo a tipos no genéricos, pero no puedo ver de inmediato por qué tienen que ser no anidados y estáticos. Sospecho que hace que las reglas de búsqueda sean mucho más simples si no tiene que preocuparse por los tipos contenidos en el tipo actual, etc., pero me atrevo a decir que sería posible.
Sospecho que la complejidad adicional de no tener estas restricciones se consideró menor que el beneficio obtenido.
EDITAR: Para ser claro, no estoy sugiriendo que tenga sentido tener métodos de instancia como métodos de extensión; estoy sugiriendo que tendría sentido tener un método de extensión estático en una clase anidada y / o no estática .