问题
Can anyone explain how the CLR handles Static classes? Does the CLR create one singleton instance for handling static classes internally? If not, why do we have a static constructor in C#? (Per my understanding, we use constructors only for instantiating the class)
回答1:
First of all there is no static class in CLR. CLR doesn't know anything about static class. It is the feature of C#.
Static classes are compiled into abstract
as well as sealed
class. Making it abstract
prevent instantiation of it and sealed
prevents inheritance.
Static classes are no special, it is just a simple class with all members static.
Is, CLR internally creates one singleton instance for handling static classes?
No, it is abstract and can't be instantiated.
If not why we have an static constructor in C#?
Static constructor will be called when type is first referenced or instantiated. It is used to initialize the static members of the class.
When is a static constructor called in C#?
回答2:
The static
constructor is called when the type is first referenced. It doesn't have to be a static
class to have a static
constructor.
The CLR doesn't create a singleton instance of a static
class. It does keep the static
variables in memory though after they are initialized.
来源:https://stackoverflow.com/questions/25643276/how-does-the-clr-handles-static-classes