Because the spec says so... Now there are probably good reasons why they wrote the spec this way.
The reason why they can't be declared in generic classes is quite obvious: given the way extension methods are called, where would you specify the type argument for the class?
The reason why it must be a static class is less obvious, but I think it makes sense. The main use case for static classes is to group helper methods together (e.g. Path
, Directory
, ProtectedData
...), and extension methods are basically helper methods. It wouldn't make sense to be able to create an instance of Enumerable
or Queryable
, for example.