NotConnectedException should not inherit from InvalidOperationException because the caller cannot control the connection
Should share a base class other than Exception with ConnectionLostException because 99% of the time, the exception handling code for both exceptions is identical
Experience has shown that: