I was reading the MSDN article about how to implement IDisposable and I am uncertain about the difference between managed and native resources cited in the article.
The short answer would be anything that you go behind the CLR's back (to the OS) to obtain can be termed as 'native'.
So now CantStayManaged has 2 things it needs to cleanup before it bids adieu.
There are 2 ways the object cleanup can be triggered now.
In both cases, the unmanaged resources should be freed up else 'LEAKS!', 'CRASHES!' et.all surface.
But you should only attempt to cleanup managed resources only in Dispose() former case.
In the latter/finalizer case - the CLR might have already finalized and collected some of your members, so you shouldn't access them (CLR doesn't guarantee an order in which an object graph is finalized.) Hence you avoid issues by guarding your managed cleanup with an if (AmIBeingCalledFromDispose) guard check
HTH