Megosztás a következőn keresztül:


CA1047: Ne deklaráljon védett tagokat lezárt típusok esetén

Tulajdonság Érték
Szabályazonosító CA1047
Cím Ne deklaráljon védett tagokat lezárt típusok esetén
Kategória Design
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

A nyilvános típus (NotInheritablea sealed Visual Basicben) védett tagot vagy védett beágyazott típust deklarál. Ez a szabály nem jelenti a metódusok megsértéseinek Finalize jelentését, amelyeknek ezt a mintát kell követnie.

Szabály leírása

A típusok védett tagokat deklarálnak, hogy az öröklő típusok elérhessék vagy felülbírálhassák a tagot. Definíció szerint nem örökölhet lezárt típusból, ami azt jelenti, hogy a lezárt típusok védett módszerei nem hívhatók meg.

A C#-fordító a CA1047 helyett a CS0628 figyelmeztetést bocsát ki ebben a helyzetben.

Szabálysértések kijavítása

A szabály megsértésének kijavításához módosítsa a tag hozzáférési szintjét privátra, vagy örökölhetővé tegye a típust.

Mikor kell letiltani a figyelmeztetéseket?

Ne tiltsa el a szabály figyelmeztetését. Ha a típust a jelenlegi állapotában hagyja, karbantartási problémákat okozhat, és nem biztosít semmilyen előnyt.

Kód konfigurálása elemzéshez

A következő beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.

Ezt a beállítást konfigurálhatja csak ehhez a szabályhoz, az összes szabályhoz, vagy az ebben a kategóriában (Tervezés) szereplő összes szabályhoz, amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.

Adott API-felületek belefoglalása

A kódbázis azon részeit konfigurálhatja, amelyeken futtathatja ezt a szabályt az akadálymentességük alapján. Ha például meg szeretné adni, hogy a szabály csak a nem nyilvános API-felületen fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Példa

Az alábbi példa egy olyan típust mutat be, amely megsérti ezt a szabályt.

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