Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| Tulajdonság | Érték |
|---|---|
| Szabályazonosító | CA1501 |
| Cím | Kerülje a túlzott öröklést |
| Kategória | Fenntarthatóság |
| A javítás romboló vagy nem romboló | Szünetelés |
| Alapértelmezett küszöbérték | 5 |
| Alapértelmezés szerint engedélyezve a .NET 10-ben | Nem |
| Alkalmazandó nyelvek | C# és Visual Basic |
Ok
Egy típus öt vagy több szintből áll az öröklési hierarchiában.
Szabály leírása
A mélyen beágyazott típushierarchiák nehezen követhetők, értelmezhetők és karbantarthatók. Ez a szabály az ugyanazon modulban lévő hierarchiákra korlátozza az elemzést.
Ezt a szabályt a következő módokon konfigurálhatja:
- Alapértelmezés szerint a szabály kizárja a típusokat a
Systemnévtérből. A szabályt úgy is konfigurálhatja, hogy más típusokat vagy névtereket is kizárjon . - Konfigurálhatja az öröklési fa mélységét, amelynél ez a szabály életbe lép.
Szabálysértések kijavítása
A szabály megsértésének kijavításához a típust olyan alaptípusból származtathatja, amely kevésbé mély az öröklési hierarchiában, vagy megszünteti a köztes alaptípusok némelyikét.
Mikor kell letiltani a figyelmeztetéseket?
Nyugodtan figyelmen kívül lehet hagyni a szabály figyelmeztetését. A kód azonban nehezebben karbantartható. Az alaptípusok láthatóságától függően a szabály megsértéseinek feloldása kompatibilitástörő változásokat eredményezhet. A nyilvános alaptípusok eltávolítása például kompatibilitástörő változás.
Megjegyzés
Ha az alábbiak mindegyike érvényes, a szabály tévesen pozitív figyelmeztetéseket jeleníthet meg:
- A Visual Studio 2022 17.5-ös vagy újabb verzióját használja a .NET SDK egy régebbi verziójával, vagyis a .NET 6-os vagy korábbi verziójával.
- A .NET 6 SDK-ból származó elemzőket vagy az elemzőcsomagok egy régebbi verzióját használja, például a Microsoft.CodeAnalysis.FxCopAnalyzerst.
A hamis pozitív értékek egy kompatibilitástörő változás miatt a C#-fordítóban jelentkeznek. Fontolja meg egy újabb elemző használatát, amely tartalmazza a hamis pozitív figyelmeztetések javítását. Frissítsen a Microsoft.CodeAnalysis.NetAnalyzers 7.0.0-preview1.22464.1-es vagy újabb verziójára, vagy használja a .NET 7 SDK elemzőit.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA1501
// The code that's violating the rule is on this line.
#pragma warning restore CA1501
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA1501.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Küszöbérték konfigurálása
Konfigurálhatja azt a küszöbértéket, amelynél a szabály kigyullad.
Hozzon létre egy CodeMetricsConfig.txt nevű szövegfájlt.
Adja hozzá a kívánt küszöbértéket a szövegfájlhoz a következő formátumban:
CA1501: 8Ebben a példában a szabály úgy van konfigurálva, hogy kigyulladjon, ha egy típus nyolc vagy több szinttel mélyebb az öröklési hierarchiában.
A projektfájlban jelölje meg a konfigurációs fájl buildelési műveletét AdditionalFilesként. Példa:
<ItemGroup> <AdditionalFiles Include="CodeMetricsConfig.txt" /> </ItemGroup>
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 erre a szabályra, az összes szabályra, vagy az ebben a kategóriában szereplő összes szabályra (Karbantarthatóság), amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.
Öröklés kizárt típus- vagy névtérnevek
A szabály konfigurálható úgy, hogy bizonyos típusokat vagy névtereket kizárjon az öröklési hierarchia fájából. Alapértelmezés szerint a System.* névtér összes típusa ki van zárva. A beállított értéktől függetlenül ez az alapértelmezett érték lesz hozzáadva.
| Beállítás értéke | Összegzés |
|---|---|
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = MyType |
Megfelel minden olyan típusnak, amelynek neve MyType, vagy amely tartalmazó nevei tartalmazzák a MyType-t (és a System névtér összes típusát is). |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = MyType1|MyType2 |
Egyezik az összes olyan típussal, amelynek a neve MyType1 vagy MyType2, vagy amelynek a névtere tartalmazza a MyType1 vagy MyType2 elemet (illetve a System névtér összes típusát). |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS.MyType |
Egyezik a névtér MyType adott típusával NS (és a System névtér összes típusával) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS1.MyType1|T:NS2.MyType2 |
Megfelel a MyType1 és MyType2 adott típusoknak a megfelelő teljes névvel, valamint a System névtér összes típusának. |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = N:NS |
Megfelel a névtér összes típusának NS (és a névtér összes típusának System ) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = My* |
Megfelel az összes olyan típusnak, amelynek neve My-vel kezdődik, vagy amelynek névtere részei My-vel kezdődnek (valamint a System névtér összes típusa) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS.My* |
Megfelel minden olyan típusnak a NS névtérben, amelynek neve My-val kezdődik (valamint a System névtér összes típusának) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = N:My* |
Megegyezik az összes olyan típussal, amelynek névtere a névtérrel My kezdődik (és a System névtér összes típusával) |
Példa
Az alábbi példa egy szabályt sértő típust mutat be:
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