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
İlgili kurallar
- CA1019: Öznitelik bağımsız değişkenleri için erişimcileri tanımlayın
- CA1018: Öznitelikleri AttributeUsageAttribute ile işaretleyin