Aracılığıyla paylaş


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 noneolarak 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() { }
}