CA1501 : Éviter l'excès d'héritageCA1501: Avoid excessive inheritance

TypeNameTypeName AvoidExcessiveInheritanceAvoidExcessiveInheritance
CheckIdCheckId CA1501CA1501
CategoryCategory Microsoft.MaintainabilityMicrosoft.Maintainability
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Un type est imbriqué de plus de quatre niveaux dans sa hiérarchie d'héritage.A type is more than four levels deep in its inheritance hierarchy.

Description de la règleRule description

Les hiérarchies de type profondément imbriquées peuvent être difficiles à suivre, comprendre et gérer.Deeply nested type hierarchies can be difficult to follow, understand, and maintain. Cette règle limite l’analyse aux hiérarchies dans le même module.This rule limits analysis to hierarchies in the same module.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, dérivez le type d’un type de base moins imbriqué dans la hiérarchie d’héritage ou éliminer certains des types de base intermédiaires.To fix a violation of this rule, derive the type from a base type that is less deep in the inheritance hierarchy or eliminate some of the intermediate base types.

Quand supprimer les avertissementsWhen to suppress warnings

Il est possible de supprimer un avertissement de cette règle.It is safe to suppress a warning from this rule. Toutefois, le code peut être plus difficile à gérer.However, the code might be more difficult to maintain. Notez que, en fonction de la visibilité des types de base, résolution des violations de cette règle peut créer des modifications avec rupture.Note that, depending on the visibility of base types, resolving violations of this rule might create breaking changes. Par exemple, la suppression des types de base publiques est une modification avec rupture.For example, removing public base types is a breaking change.

ExempleExample

L’exemple suivant montre un type qui viole la règle.The following example shows a type that violates the rule.

using System;

namespace MaintainabilityLibrary
{
   class BaseClass {}
   class FirstDerivedClass : BaseClass {}
   class SecondDerivedClass : FirstDerivedClass {}
   class ThirdDerivedClass : SecondDerivedClass {}
   class FourthDerivedClass : ThirdDerivedClass {}

   // This class violates the rule.
   class FifthDerivedClass : FourthDerivedClass {}
}
Imports System

Namespace MaintainabilityLibrary

   Class BaseClass
   End Class

   Class FirstDerivedClass
      Inherits BaseClass
   End Class

   Class SecondDerivedClass
      Inherits FirstDerivedClass
   End Class

   Class ThirdDerivedClass
      Inherits SecondDerivedClass
   End Class

   Class FourthDerivedClass
      Inherits ThirdDerivedClass
   End Class

   ' This class violates the rule.
   Class FifthDerivedClass
      Inherits FourthDerivedClass
   End Class

End Namespace