CA1052: Statik tutucu türleri Static veya NotInheritable olmalıdır
Özellik | Değer |
---|---|
Kural Kimliği | CA1052 |
Başlık | Statik tutucu türleri Static veya NotInheritable olmalıdır |
Kategori | Tasarım |
Hataya neden olan veya bozulmayan düzeltme | Yeni |
.NET 8'de varsayılan olarak etkin | Hayır |
Neden
Soyut olmayan bir tür yalnızca statik üyeler (olası bir varsayılan oluşturucu dışında) içerir ve statik veya Paylaşılan değiştirici ile bildirilmemiştir.
Varsayılan olarak, bu kural yalnızca dışarıdan görünen türlere bakar, ancak bu yapılandırılabilir.
Kural açıklaması
Kural CA1052 yalnızca statik üyeleri içeren bir türün devralınacak şekilde tasarlanmadığını varsayar, çünkü tür türetilmiş bir türde geçersiz kılınabilecek herhangi bir işlevsellik sağlamaz. Devralınması amaçlanmamış bir tür, temel tür olarak kullanılmasını yasaklayan C# dilinde değiştirici ile static
işaretlenmelidir. Ayrıca, varsayılan oluşturucu kaldırılmalıdır. Visual Basic'te sınıfı bir modüle dönüştürülmelidir.
Bu kural soyut sınıflar veya temel sınıfı olan sınıflar için tetiklenmez. Ancak, kural boş bir arabirimi destekleyen sınıflar için tetikler.
Dekont
Bu kuralın en son çözümleyici uygulamasında, CA1053 kuralının işlevselliğini de kapsar.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için türü olarak static
işaretleyin ve varsayılan oluşturucuyu (C#) kaldırın veya bir modüle (Visual Basic) dönüştürün.
Uyarıların ne zaman bastırılması gerekiyor?
Aşağıdaki durumlarda ihlalleri gizleyebilirsiniz:
- Türü devralınacak şekilde tasarlanmıştır. Değiştiricinin
static
olmaması, türün temel tür olarak yararlı olduğunu gösterir. - Tür, tür bağımsız değişkeni olarak kullanılır. Statik türler tür bağımsız değişkenleri olarak kullanılamaz.
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 CA1052
// The code that's violating the rule is on this line.
#pragma warning restore CA1052
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.CA1052.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Çözümlemek için kod yapılandırma
Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.
Bu seçeneği yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Tasarım) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Belirli API yüzeylerini ekleme
Bu kuralın üzerinde çalıştırılacak kod tabanınızın hangi bölümlerini erişilebilirliklerine göre yapılandırabilirsiniz. Örneğin, kuralın yalnızca genel olmayan API yüzeyinde çalıştırılması gerektiğini belirtmek için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CAXXXX.api_surface = private, internal
İhlal örneği
Aşağıdaki örnekte kuralı ihlal eden bir tür gösterilmektedir:
public class StaticMembers
{
public static int SomeProperty { get; set; }
public static void SomeMethod() { }
}
Imports System
Namespace ca1052
Public Class StaticMembers
Shared Property SomeProperty As Integer
Private Sub New()
End Sub
Shared Sub SomeMethod()
End Sub
End Class
End Namespace
Statik değiştirici ile düzeltme
Aşağıdaki örnekte, türü C# dilinde değiştirici ile işaretleyerek bu kuralın ihlalinin static
nasıl düzeltildiği gösterilmektedir:
public static class StaticMembers
{
public static int SomeProperty { get; set; }
public static void SomeMethod() { }
}