== Why is this an issue? 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: * The class observes a field that is under the responsibility of another class. * The class owns the field, and is therefore responsible for calling `Dispose` on it. 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. === Noncompliant code example [source,csharp,diff-id=1,diff-type=noncompliant] ---- public class ResourceHolder // Noncompliant; doesn't implement IDisposable { private FileStream fs; // This member is never Disposed public void OpenResource(string path) { this.fs = new FileStream(path, FileMode.Open); // I create the FileStream, I'm owning it } public void CloseResource() { this.fs.Close(); } } ---- === Compliant solution [source,csharp,diff-id=1,diff-type=compliant] ---- public class ResourceHolder : IDisposable { private FileStream fs; public void OpenResource(string path) { this.fs = new FileStream(path, FileMode.Open); // I create the FileStream, I'm owning it } public void CloseResource() { this.fs.Close(); } public void Dispose() { this.fs.Dispose(); } } ---- == Resources * CWE - https://cwe.mitre.org/data/definitions/459[CWE-459 - Incomplete Cleanup]