public virtual void Dispose()
    {
        lock (this)
        {
            if (swigCPtr.Handle != global::System.IntPtr.Zero)
            {
                swigCMemOwn = false;
                if (Environment.Is64BitProcess)
                {
                    CoolPropPINVOKE64.delete_AbstractState(swigCPtr);
                }
                else
                {
                    CoolPropPINVOKE.delete_AbstractState(swigCPtr);
                }

                swigCPtr = new HandleRef(null, IntPtr.Zero);
            }
            GC.SuppressFinalize(this);
        }
    }