Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA1501 |
| Judul | Hindari pewarisan yang berlebihan |
| Kategori | Kemampu |
| Perbaikan bersifat merusak atau tidak merusak | Merusak |
| Ambang batas bawaan | 5 |
| Diaktifkan secara default di .NET 10 | Tidak |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Suatu tipe memiliki lima atau lebih tingkat dalam hierarki pewarisannya.
Deskripsi aturan
Hierarki jenis yang sangat berlapis dapat menjadi sulit untuk diikuti, dipahami, dan dipelihara. Aturan ini membatasi analisis hierarki dalam modul yang sama.
Anda dapat mengonfigurasi aturan ini dengan cara berikut:
- Secara bawaan, aturan mengecualikan jenis dari namespace
System. Anda juga dapat mengonfigurasi aturan untuk mengecualikan jenis atau namespace lainnya . - Anda dapat mengonfigurasi kedalaman pohon pewarisan tempat aturan ini diaktifkan.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, turunkan tipe dari tipe dasar yang kurang dalam dalam hierarki pewarisan atau hilangkan beberapa tipe dasar perantara.
Kapan harus menekan peringatan
Aman untuk menekan peringatan dari aturan ini. Namun, kode mungkin lebih sulit dipertahankan. Bergantung pada visibilitas jenis dasar, dalam menyelesaikan pelanggaran aturan ini mungkin dapat membuat perubahan yang merusak. Misalnya, menghapus jenis dasar publik adalah perubahan mendasar.
Catatan
Anda mungkin melihat peringatan positif palsu dari aturan ini jika semua hal berikut ini berlaku:
- Anda menggunakan Visual Studio 2022 versi 17.5 atau yang lebih baru dengan versi .NET SDK yang lebih lama, yaitu, .NET 6 atau yang lebih lama.
- Anda menggunakan penganalisis dari .NET 6 SDK atau versi paket penganalisis yang lebih lama, seperti Microsoft.CodeAnalysis.FxCopAnalyzers.
Positif palsu disebabkan oleh perubahan besar dalam kompiler C#. Pertimbangkan untuk menggunakan penganalisis yang lebih baru yang berisi perbaikan untuk peringatan positif palsu. Tingkatkan ke Microsoft.CodeAnalysis.NetAnalyzers versi 7.0.0-preview1.22464.1 atau yang lebih baru atau gunakan penganalisis dari .NET 7 SDK.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA1501
// The code that's violating the rule is on this line.
#pragma warning restore CA1501
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1501.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Mengonfigurasi ambang batas
Anda dapat mengonfigurasi ambang di mana aturan ini diaktifkan.
Buat file teks bernama CodeMetricsConfig.txt.
Tambahkan ambang yang diinginkan ke file teks dalam format berikut:
CA1501: 8Dalam contoh ini, aturan dikonfigurasi untuk diaktifkan ketika jenis memiliki delapan tingkat atau lebih dalam hierarki warisannya.
Dalam file proyek, tandai aksi build untuk file konfigurasi sebagai AdditionalFiles. Contohnya:
<ItemGroup> <AdditionalFiles Include="CodeMetricsConfig.txt" /> </ItemGroup>
Mengonfigurasi kode yang akan dianalisis
Gunakan opsi berikut untuk mengonfigurasi bagian mana dari codebase Anda yang akan menjalankan aturan ini.
Anda dapat mengonfigurasi opsi ini hanya untuk aturan ini, untuk semua aturan yang berlaku untuknya, atau untuk semua aturan dalam kategori ini (Maintainability) yang diterapkannya. Untuk informasi selengkapnya, lihat Opsi konfigurasi aturan kualitas kode.
Nama tipe atau namespace yang dikecualikan dari pewarisan
Anda dapat mengonfigurasi aturan untuk mengecualikan jenis atau namespace tertentu dari pohon hierarki pewarisan. Secara default, semua jenis dari System.* namespace dikecualikan. Apa pun nilai yang Anda tetapkan, nilai default ini ditambahkan.
| Nilai Opsi | Ringkasan |
|---|---|
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = MyType |
Cocok dengan semua jenis yang bernama MyType atau yang namespace-nya berisi MyType (dan semua jenis dari namespace System) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = MyType1|MyType2 |
Cocok dengan semua jenis yang bernama baik MyType1 atau MyType2 atau namespace-nya yang mengandung baik MyType1 atau MyType2 (dan semua jenis dari namespace System) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS.MyType |
Cocok dengan jenis MyType tertentu di namespace NS (dan semua jenis dari namespace System) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS1.MyType1|T:NS2.MyType2 |
Mencocokkan jenis MyType1 dan MyType2 yang spesifik dengan nama lengkap yang memenuhi syarat masing-masing (dan semua jenis dari ruang nama System) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = N:NS |
Mencocokkan semua tipe dari NS namespace (dan semua tipe dari System namespace) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = My* |
Cocok dengan semua jenis yang namanya dimulai dengan My atau bagian namespace yang berisi jenis yang dimulai dengan My (dan semua jenis dari namespace System) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = T:NS.My* |
Cocok dengan semua jenis yang dimulai dengan nama My di NS namespace (dan semua jenis dari System namespace) |
dotnet_code_quality.CA1501.additional_inheritance_excluded_symbol_names = N:My* |
Cocok dengan semua jenis yang namespace-nya dimulai dengan My (dan semua jenis dari namespace System) |
Contoh
Contoh berikut menunjukkan jenis yang melanggar aturan:
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