If an object's dispose method is called more than once, the object must ignore all calls after the first call. If the dispose method of an object is called multiple times, do not raise an exception. If the instance method except dispose is released, objectdisposedexception is triggered.
You may expect resource types to use specific conventions to indicate the allocated and released statuses. Stream classes are such an example. Traditionally, they are either open or closed. The implementers of classes with such conventions may choose to implement a public method with a custom name (such as "close") to call the dispose method.
Because the dispose method must be called explicitly, the object implementing idisposable must also implement a terminator to handle resource release issues when dispose is not called. By default, the garbage collector automatically calls the final end of an object before it recycles its memory. However, after calling the dispose method, the garbage collector usually does not need to call the terminator of the released object. To prevent automatic termination, the dispose implementation can call the GC. suppressfinalize method.