Aracılığıyla paylaş


CA1813: Koruması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
Hataya neden olan veya bozulmayan düzeltme Yeni
.NET 9'da varsayılan olarak etkin Hayır

Neden

ortak türü öğesinden System.Attributedevralır, soyut değildir ve korumalı değildir (NotInheritable Visual Basic'te).

Kural açıklaması

.NET, özel öznitelikleri almak için yöntemler sağlar. Varsayılan olarak, bu yöntemleri öznitelik devralma hiyerarşisinde 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 none olarak 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
{
    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

Ayrıca bkz.