.NET documentation states when the dispose pattern is supposed to be used.
It is when we interact with:
- file handles
- pipe handles
- registry handles
- wait handles
- pointers to blocks of unmanaged memory
What are some practical C# examples of each category above?