CIL has no static classes. CIL has abstract classes and has sealed classes. An abstract class cannot be created directly (although a concrete class can be obtained from an abstract class). Sealed class could not be obtained. Combine them, and you have something that the C # compiler can use to implement static classes.
By the way, this fact that CIL does not have static classes means that restrictions on static classes as arguments of a general type also do not exist in CIL. Given static class X , CIL allows you to create what C # will call List<X> . However, given that there can be no instances of X or any class derived from it, the only value you can store in such a list is null .
source share