Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
| TypeName | FinalizersShouldBeProtected | 
| CheckId | CA2221 | 
| Category | Microsoft.Usage | 
| Breaking Change | Non Breaking | 
Cause
A public type implements a finalizer that does not specify family (protected) access.
Rule Description
Finalizers must use the family access modifier. This rule is enforced by the C#, Visual Basic, and Visual C++ compilers.
How to Fix Violations
To fix a violation of this rule, change the finalizer to be family-accessible.
When to Suppress Warnings
Do not suppress a warning from this rule.
Example
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
See Also
Other Resources
Implementing Finalize and Dispose to Clean Up Unmanaged Resources