An ``IDisposable`` object should be disposed (there are some rare exceptions where not disposing is fine, most notably ``Task``). If a class has an ``IDisposable`` field, there can be two situations:
In the second case, the safest way for the class to ensure ``Dispose`` is called is to call it in its own ``Dispose`` function, and therefore to be itself ``IDisposable``. A class is considered to own an ``IDisposable`` field resource if it created the object referenced by the field.