Extension methods require declaring class to be static

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.

Leave a Comment