Bagikan melalui


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 8 Tidak

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

Baca juga