CA1501:継承を使用しすぎないでください

ルール ID CA1501
カテゴリ 保守容易性
修正が中断ありか中断なしか あり

原因

型が、その継承階層内の 5 つ以上深いレベルにあります。

既定では、この規則は System 名前空間からの型のみを除外しますが、これは構成可能です。

規則の説明

深いレベルで入れ子にされた型の確認、理解、および保守は困難です。 この規則は、分析を同じモジュール内の階層に限定します。

違反の修正方法

この規則違反を修正するには、継承階層にある深度の深くない基本データ型から型を派生させるか、一部の中間基本データ型を削除します。

どのようなときに警告を抑制するか

この規則による警告を抑制しても問題ありません。 ただし、コードの保守が困難になることがあります。 基本データ型の可視性によっては、この規則違反の解決によって、破壊的変更が生じる場合があることに注意してください。 たとえば、パブリック基本データ型の削除は、破壊的変更になります。

分析するコードを構成する

次のオプションを使用して、コードベースのどの部分に対してこの規則を実行するか構成します。

このオプションを構成できる対象は、この規則だけ、すべての規則、このカテゴリ (保守容易性) のすべての規則のいずれかです。 詳細については、「コード品質規則の構成オプション」を参照してください。

継承から除外された型または名前空間の名前

継承階層ツリーから特定の型または名前空間を除外するように規則を構成できます。 既定では、System.* 名前空間のすべての型が除外されます。 設定した値に関係なく、この既定値が追加されます。

オプション値 まとめ
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = MyType MyType と名前が付けられたすべての型、または含まれる名前空間に MyType が含まれるすべての型 (および System 名前空間のすべての型) と一致します。
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = MyType1|MyType2 MyType1 または MyType2 と名前が付けられたすべての型、あるいは含まれる名前空間に MyType1 または MyType2 が含まれるすべての型 (および System 名前空間のすべての型) と一致します。
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS.MyType 名前空間 NS 内の特定の型 MyType (および System 名前空間のすべての型) と一致します。
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS1.MyType1|T:NS2.MyType2 それぞれの完全修飾名を持つ特定の型 MyType1 および MyType2 (および System 名前空間のすべての型) と一致します。
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = N:NS NS 名前空間のすべての型 (および System 名前空間のすべての型) と一致します。
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = My* 名前が My で始まるか、または含まれる名前空間の一部が My で始まるすべての型 (および System 名前空間のすべての型) と一致します。
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS.My* 名前空間 NS の名前が My で始まるすべての型 (および System 名前空間のすべての型) と一致します。
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = N:My* 含まれる名前空間が My で始まるすべての型 (および System 名前空間のすべての型) と一致します。

次の例は、規則に違反する型を示しています。

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 ca1501

    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