CA1047:シールド型の保護されたメンバーを宣言しません
プロパティ | 値 |
---|---|
ルール ID | CA1047 |
Title | シールド型の保護されたメンバーを宣言しません |
[カテゴリ] | デザイン |
修正が中断ありか中断なしか | なし |
.NET 9 では既定で有効 | 提案として |
原因
ある 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
.NET