In the following code:
public sealed class Switch
{
    public static MyObj s_object = new MyObj();
    private readonly SomeObject m_object = new SomeObject();
    ~Switch()
    {
        m_object?.Dispose();
    }
}
public class Test()
{
    Test() 
    {
        Switch switch = new Switch();
        switch = null;
        ...
    }
}
When the Test ctor executes, a new Switch object is created then immediately set to null. At some point the GC will dispose of it, calling the ~Switch() destructor in the process. But will that happen when a class contains a static field like s_object and the calling app has not terminated (app domain still loaded)? Static objects persist for the lifetime of the application; does that mean the non-static class containing it will too?