Why do extension methods require the declaring class to be static? Is it a compiler requirement?
-
possible duplicate of [Why are extension methods only allowed in non-nested, non-generic static class?](http://stackoverflow.com/questions/3930335/why-are-extension-methods-only-allowed-in-non-nested-non-generic-static-class) – nawfal Jun 02 '13 at 07:19
1 Answers
It's dictated in the language specification, section 10.6.9 of the C# 4 spec:
When the first parameter of a method includes the this modifier, that method is said to be an extension method. Extension methods can only be declared in non-generic, non-nested static classes. The first parameter of an extension method can have no modifiers other than this, and the parameter type cannot be a pointer type.
It's not clear to me why all of these restrictions are necessary - other than potentially for compiler (and language spec) simplicity. I can see why it makes sense to restrict it to non-generic types, but I can't immediately see why they have to be non-nested and static. I suspect it makes the lookup rules considerably simpler if you don't have to worry about types contained within the current type etc, but I dare say it would be possible.
I suspect that the extra complexity of not having these restrictions was deemed less than the benefit gained.
EDIT: Just to be clear, I'm not suggesting that it would make sense to have instance methods as extension methods - I'm suggesting that it would make sense to have a static extension method in a nested and/or non-static class.

- 1,421,763
- 867
- 9,128
- 9,194
-
2@Jon: How would a non-static implementation work? What instance of the extension method class would a call use? – Adam Robinson Apr 28 '10 at 17:30
-
I'm with Adam, if it wasn't static how would the specific instance to call be determined? What would it mean if there were several instances? – Sam Holder Apr 28 '10 at 17:43
-
5@Adam: I wasn't suggesting a nonstatic method would make sense. I was suggesting a nonstatic *type* would make sense. – Jon Skeet Apr 28 '10 at 17:56
-