GC.SuppressFinalize
asks the Common Language Runtime not to call the finalizer of an object. This is useful when implementing the
dispose pattern where object finalization is already handled in IDisposable.Dispose
. However, it has no effect if there is no finalizer
defined in the object’s type, so using it in such cases is just confusing.
This rule raises an issue when GC.SuppressFinalize
is called for objects of sealed
types without a finalizer.
Note: S3971 is a stricter version of this rule. Typically it makes sense to activate only one of these 2
rules.
Noncompliant code example
sealed class MyClass
{
public void Method()
{
...
GC.SuppressFinalize(this); //Noncompliant
}
}
Compliant solution
sealed class MyClass
{
public void Method()
{
...
}
}