Freezing is not allowed because the user will always have to make changes to the object based upon IsFrontBufferAvailable. We could consider SetBackBuffer to not count as a "change" but any thread could call it and that would violate our synchronization assumptions. Sealed to prevent subclasses from modifying the correct behavior.