CA1813: Hindari atribut yang tidak disegel
Properti | Nilai |
---|---|
ID Aturan | CA1813 |
Judul | Hindari atribut yang tidak disegel |
Golongan | Performa |
Perbaikan bersifat disruptif atau non-disruptif | Merusak |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Jenis publik mewarisi dari System.Attribute, tidak abstrak, dan tidak disegel (NotInheritable
dalam Visual Basic).
Deskripsi aturan
.NET menyediakan metode untuk mengambil atribut kustom. Secara default, metode ini mencari hierarki warisan atribut. Misalnya, System.Attribute.GetCustomAttribute mencari jenis atribut yang ditentukan atau jenis atribut apa pun yang memperluas jenis atribut yang ditentukan. Menyegel atribut menghilangkan pencarian melalui hierarki pewarisan, dan dapat meningkatkan performa.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, segel jenis atribut atau buat abstrak.
Kapan harus menekan peringatan
Aman untuk menyembunyikan peringatan dari aturan ini. Tekan hanya jika Anda menentukan hierarki atribut dan tidak dapat menutup atribut atau membuatnya abstrak.
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 CA1813
// The code that's violating the rule is on this line.
#pragma warning restore CA1813
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1813.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Contoh
Contoh berikut menunjukkan atribut kustom yang memenuhi aturan ini.
// Satisfies rule: AvoidUnsealedAttributes.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public sealed class DeveloperAttribute : Attribute
{
private string nameValue;
public DeveloperAttribute(string name)
{
nameValue = name;
}
public string Name
{
get
{
return nameValue;
}
}
}
Imports System
Namespace ca1813
' Satisfies rule: AvoidUnsealedAttributes.
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Struct)>
Public NotInheritable Class DeveloperAttribute
Inherits Attribute
Public Sub New(name As String)
Me.Name = name
End Sub
Public ReadOnly Property Name() As String
End Class
End Namespace
Aturan terkait
- CA1019: Tentukan pengakses untuk argumen atribut
- CA1018: Tandai atribut dengan AttributeUsageAttribute