Because the specification says so ... Now, probably, there are good reasons why they wrote the specification in this way.
The reason they cannot be declared in generic classes is quite obvious: given the way you call extension methods, where would you specify the type argument for the class?
The reason why this should be a static class is less obvious, but I think it makes sense. The main use case for static classes is to combine helper methods together (e.g. Path , Directory , ProtectedData ...), and extension methods are mostly helper methods. It would be pointless to create an instance of Enumerable or Queryable , for example.
Thomas levesque
source share