Unmanaged code is anything that doesn't use the .NET Framework, so basically COM and APIs. If your classes use unmanaged resources that need to be cleaned up, or they use other .NET classes that do, then you should implement a Dispose method. Managed classes that use unmanaged resources will basically be those that implement a Dispose method themselves, so your Dispose method may just call Dispose on a member variable or two.