CA1047:シールド型の保護されたメンバーを宣言しません

プロパティ
ルール ID CA1047
Title シールド型の保護されたメンバーを宣言しません
[カテゴリ] デザイン
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

ある public 型が sealed (Visual Basic では NotInheritable) であり、protected メンバーまたは protected の入れ子にされた型を宣言します。 このパターンに従う必要がある Finalize メソッドの場合、この規則からは違反が報告されません。

規則の説明

型でプロテクト メンバーを宣言するのは、継承する型からメンバーにアクセスまたはオーバーライドできるようにするためです。 定義上、sealed 型から継承できません。つまり、sealed 型上の protected メソッドは呼び出せません。

C# コンパイラは、この状況に対して CA1047 の代わりに警告 CS0628 を出力します。

違反の修正方法

この規則違反を修正するには、メンバーのアクセス レベルを private に変更するか、型を継承不可にします。

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

この規則による警告は抑制しないでください。 型を現状のままにすると、メンテナンス問題が発生することがあり、何の利点もありません。

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

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

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

特定の API サーフェイスを含める

ユーザー補助に基づいて、この規則を実行するコードベースの部分を構成できます。 たとえば、非パブリック API サーフェイスでのみ規則を実行するように指定するには、プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。

dotnet_code_quality.CAXXXX.api_surface = private, internal

次の例からは、この規則に違反する型を確認できます。

public sealed class SealedClass
{
    protected void ProtectedMethod(){}
}
Public NotInheritable Class BadSealedType
    Protected  Sub MyMethod
    End Sub
End Class