C# has static constructor which do some initialization (likely do some unmanaged resource initialization).
I am wondering if there is static destructor?
Initializing and cleaning up unmanaged resources from a Static implementation is quite problematic and prone to issues.
Why not use a singleton, and implement a Finalizer for the instance (an ideally inherit from SafeHandle)
Finalizer
SafeHandle