CA2221: Finalizers should be protected

 

For the latest documentation on Visual Studio 2017 RC, see Visual Studio 2017 RC Documentation.

TypeNameFinalizersShouldBeProtected
CheckIdCA2221
CategoryMicrosoft.Usage
Breaking ChangeNon Breaking

A public type implements a finalizer that does not specify family (protected) access.

Finalizers must use the family access modifier. This rule is enforced by the C#, Visual Basic, and Visual C++ compilers.

To fix a violation of this rule, change the finalizer to be family-accessible.

Do not suppress a warning from this rule.

This rule cannot be violated in any high-level .NET language; it can be violated if you are writing Microsoft Intermediate Language.

// =============== CLASS MEMBERS DECLARATION ===================  
//   note that class flags, 'extends' and 'implements' clauses  
//          are provided here for information only  
  
.namespace UsageLibrary  
{  
  .class public auto ansi beforefieldinit FinalizeMethodNotProtected  
         extends [mscorlib]System.Object  
  {  
    .method public hidebysig instance void  
            Finalize() cil managed  
    {  
  
      // Code size       1 (0x1)  
      .maxstack  0  
      IL_0000:  ret  
    } // end of method FinalizeMethodNotProtected::Finalize  
  
    .method public hidebysig specialname rtspecialname  
            instance void  .ctor() cil managed  
    {  
      // Code size       7 (0x7)  
      .maxstack  1  
      IL_0000:  ldarg.0  
      IL_0001:  call       instance void [mscorlib]System.Object::.ctor()  
      IL_0006:  ret  
    } // end of method FinalizeMethodNotProtected::.ctor  
  
  } // end of class FinalizeMethodNotProtected  
} // end of namespace  

Dispose Pattern

Show: