CA1813: Mühürsüz özniteliklerden kaçının

Özellik Değer
Kural Kimliği CA1813
Başlık Mühürsüz özniteliklerden kaçının
Kategori Performans
Düzeltme bozucu ya da bozmayan olabilir Son Dakika
.NET 10'da varsayılan olarak etkin Hayır
Geçerli diller C# ve Visual Basic

Neden

Genel bir tür System.Attribute öğesinden devralır, soyut değildir ve mühürlü değildir (NotInheritable Visual Basic'te).

Kural açıklaması

.NET, özel öznitelikleri almak için yöntemler sağlar. Varsayılan olarak, bu yöntemler öznitelik devralma hiyerarşisini arar. Örneğin, System.Attribute.GetCustomAttribute belirtilen öznitelik türünü veya belirtilen öznitelik türünü genişleten herhangi bir öznitelik türünü arar. özniteliğinin mühürlenmesi, devralma hiyerarşisi aracılığıyla aramayı ortadan kaldırır ve performansı artırabilir.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için öznitelik türünü mühürleyin veya soyut hale getirin.

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan gelen bir uyarıyı engellemek güvenlidir. Yalnızca bir öznitelik hiyerarşisi tanımlıyorsanız ve özniteliği mühürleyemediğiniz veya soyut hale getiremediğiniz takdirde gizleyebilirsiniz.

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 CA1813
// The code that's violating the rule is on this line.
#pragma warning restore CA1813

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.CA1813.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Örnek

Aşağıdaki örnekte bu kuralı karşılayan özel bir öznitelik gösterilmektedir.

// Satisfies rule: AvoidUnsealedAttributes.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public sealed class DeveloperAttribute : Attribute
{
    public DeveloperAttribute(string name)
    {
        Name = name;
    }

    public string Name { get; }
}
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

Ayrıca bkz.