Condividi tramite


Evitare ereditarietà eccessiva

Aggiornamento: novembre 2007

TypeName

AvoidExcessiveInheritance

CheckId

CA1501

Categoria

Microsoft.Maintainability

Breaking Change

Breaking

Causa

Un tipo si trova oltre il quarto livello di nidificazione nella gerarchia di ereditarietà.

Descrizione della regola

Le gerarchie di tipi eccessivamente nidificate possono comportare difficoltà di comprensione e gestione. Questa regola limita l'analisi alle gerarchie che si trovano all'interno dello stesso modulo.

Correzione di violazioni

Per correggere una violazione di questa regola, derivare il tipo da un tipo di base meno nidificato nella gerarchia di ereditarietà o eliminare alcuni dei tipi di base intermedi.

Esclusione di avvisi

L'esclusione di un avviso da questa regola è sicura, tuttavia può comportare una maggiore difficoltà di gestione del codice. Si noti che in base alla visibilità dei tipi di base, la risoluzione delle violazioni di questa regola potrebbe determinare modifiche importanti. La rimozione dei tipi di base pubblici, ad esempio, è una modifica importante.

Esempio

Nell'esempio riportato di seguito viene illustrato un tipo che viola la regola.

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
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 {}
}