26

Why do extension methods require the declaring class to be static? Is it a compiler requirement?

Rob
  • 26,989
  • 16
  • 82
  • 98
sooraj
  • 261
  • 3
  • 3
  • 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 Answers1

35

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.

Jon Skeet
  • 1,421,763
  • 867
  • 9,128
  • 9,194