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
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

Soyut olmayan bir tür, yalnızca statik üyeler (olası bir varsayılan oluşturucu dışında) içerir ve static veya Shared değiştiricisi 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 arayüzü destekleyen sınıflar için gerçekten çalışır.

Not

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, bir tür argümanı 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.

Kod çözümleme için konfigüre et

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

api_surface seçeneğini ayarlayarak, bu kuralın erişilebilirliği temelinde kod tabanınızın hangi bölümlerinde çalıştırılacaklarını 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

Not

XXXX CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.

İ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 örnek, static değiştiricisi ile C# dilinde türü işaretleyerek bu kural ihlalini nasıl çözebileceğinizi göstermektedir.

public static class StaticMembers
{
    public static int SomeProperty { get; set; }
    public static void SomeMethod() { }
}