Это соглашение, специфичное для языка C #, в CLR нет понятия статических классов. Это гарантирует, что вы не можете случайно добавить элемент экземпляра в класс, не можете наследовать класс, а клиентский код не может случайно создать экземпляр класса. В основе лежат атрибуты TypeAttributes для класса Abstract и Sealed. Аннотация гарантирует, что новый оператор не может работать, а Sealed гарантирует, что вы не можете наследовать от класса.
Также по соглашению методы расширения должны быть статическими членами статического класса. VB.NET делает это по-другому, для этого требуется атрибут [Extension].
Использование статических классов в вашем коде не обязательно, но полезно. Их контракт очень нагляден, он облегчает понимание вашего кода. Но будьте осторожны, чтобы не использовать их в качестве средства для написания процедурного кода вместо кода ООП.