Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA1501 |
| Başlık | Aşırı devralmadan kaçının |
| Kategori | Bakım Kolaylığı |
| Düzeltme bozucu ya da bozmayan olabilir | Son Dakika |
| Varsayılan eşik | 5 |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
Tür, devralma hiyerarşisinde beş veya daha fazla düzey derinliğindedir.
Kural açıklaması
İç içe yuvalanmış hiyerarşileri izlemek, anlamak ve muhafaza etmek zor olabilir. Bu kural, analizi aynı modüldeki hiyerarşilerle sınırlar.
Bu kuralı aşağıdaki yollarla yapılandırabilirsiniz:
- Varsayılan olarak, kural
Systemad alanındaki türleri hariç tutar. Kuralı diğer türleri veya ad alanlarını da dışlamak için yapılandırabilirsiniz. - Bu kuralın tetikleneceği devralma ağacı derinliğini yapılandırabilirsiniz.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için, türü devralma hiyerarşisinde daha az derin olan bir temel türden türetin veya ara temel türlerden bazılarını ortadan kaldırın.
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan gelen bir uyarıyı engellemek güvenlidir. Ancak, kodu korumak daha zor olabilir. Temel türlerin görünürlüğüne bağlı olarak, bu kuralın ihlallerini çözmek geriye dönük uyumsuzluklara yol açabilir. Örneğin, genel erişimli temel türleri kaldırmak hataya neden olan bir değişikliktir.
Not
Aşağıdakilerin tümü geçerliyse bu kuraldan hatalı pozitif uyarılar görebilirsiniz:
- Visual Studio 2022 sürüm 17.5 veya üzerini .NET SDK'nın daha eski bir sürümüyle ( .NET 6 veya önceki bir sürüm) kullanıyorsunuz.
- .NET 6 SDK'sından çözümleyicileri veya çözümleyici paketlerinin Microsoft.CodeAnalysis.FxCopAnalyzers gibi eski bir sürümünü kullanıyorsunuz.
Hatalı pozitifler, C# derleyicisindeki büyük bir değişiklikten kaynaklanmaktadır. Hatalı pozitif uyarıların düzeltmesini içeren daha yeni bir çözümleyici kullanmayı düşünün. Microsoft.CodeAnalysis.NetAnalyzers sürüm 7.0.0-preview1.22464.1 veya daha yeni bir sürüme yükseltin veya .NET 7 SDK'sından çözümleyicileri kullanın.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA1501
// The code that's violating the rule is on this line.
#pragma warning restore CA1501
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1501.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Eşiği yapılandır
Bu kuralın tetiklendiği eşiği yapılandırabilirsiniz.
CodeMetricsConfig.txt adlı bir metin dosyası oluşturun.
İstenen eşiği metin dosyasına aşağıdaki biçimde ekleyin:
CA1501: 8Bu örnekte kural, bir tür devralma hiyerarşi içinde sekiz veya daha fazla düzey derin olduğunda tetiklenecek şekilde yapılandırılır.
Proje dosyasında yapılandırma dosyasının derleme eylemini AdditionalFiles olarak işaretleyin. Örneğin:
<ItemGroup> <AdditionalFiles Include="CodeMetricsConfig.txt" /> </ItemGroup>
Kod çözümleme için konfigüre et
Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.
Bu seçeneği yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Bakım) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Devralmaya dahil edilmeyen tür veya ad alanı adları
Kuralı, devralma hiyerarşi ağacından belirli türleri veya ad alanlarını dışlamak üzere yapılandırabilirsiniz. Varsayılan olarak, ad alanından System.* tüm türler dışlanır. Hangi değeri ayarlarsanız ayarlayın, bu varsayılan değer eklenir.
| Seçenek Değeri | Özet |
|---|---|
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = MyType |
İsmi MyType olan veya ad alanı MyType içeren tüm türleri (ve System ad alanındaki tüm türleri) eşleştirir. |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = MyType1|MyType2 |
İsimleri MyType1 veya MyType2 olan ya da bulundukları ad alanları MyType1 veya MyType2 içeren (ve System ad alanındaki tüm türleri kapsayan) tüm türleri eşleştirir. |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS.MyType |
MyType ad alanındaki belirli türü (ve System ad alanındaki tüm türleri) eşleştirir |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS1.MyType1|T:NS2.MyType2 |
Belirli türleri MyType1 ve MyType2, ilgili tam nitelikli adlarıyla (ve System ad alanındaki tüm türlerle) eşleştirir. |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = N:NS |
NS ad alanındaki tüm türleri (ve System ad alanındaki tüm türleri) eşleştirir |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = My* |
Adı My ile başlayan veya dahil olduğu ad alanı bölümleri My ile başlayan tüm türleri (ve System ad alanından gelen tüm türleri) eşleştirir. |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS.My* |
Ad alanı My ile başlayan tüm türleri (ve System ad alanından gelen tüm türleri) eşleştirir. |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = N:My* |
My ile başlayan ad alanına sahip tüm türleri (ve System ad alanındaki tüm türleri) eşleştirir |
Örnek
Aşağıdaki örnekte kuralı ihlal eden bir tür gösterilmektedir:
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