Aracılığıyla paylaş


CA1802: Değişmezleri, uygun olan yerlerde kullanın.

TürAdı

UseLiteralsWhereAppropriate

CheckId

CA1802

Kategori

Microsoft.Performance

Bozan Değişiklik

Bozmayan

Sebep

static ve readonly (Shared ve ReadOnly , Visual Basic) olarak tanımlanmış alanlar ve derleme zamanında hesaplanabilen değerler başlatıldı.

Kural Tanımı

Bu staticreadonly alan değeri türü belirlemek için statik olurştuma cağrıldığız zaman, zaman çalışmasında hesaplanır.Eğer staticreadonly alanı bilgilendirildiğinde başlar ve statik oluşturucu açıkca bilgilendirilmediğinde, derleyici alan başlatmak için bir statik oluşturucu yayar.

Bu const alan değeri derleme sırasında hesaplanır ve metadata'da saklanır, buda çalışma zamanı performansını staticreadonly karşılaştırıldığında artırır.

Hedeflenen alana atanan değer derleme zamanında hesaplanabilir olduğundan dolayı const alanının tanımını değiştirip değerin çalışma zamanında hesaplanması yerine derleme zamanında hesaplanmasını sağlayın.

İhlallerin Düzeltilmesi

Bu kural ihlalini düzeltmek için, static ve readonly değiştiricilerini const değiştiricisi ile değiştirin.

Uyarılar Ne Zaman Bastırılmalı

Eğer performans önemli değilse bu kuralın bastırılması veya devre dışı bırakılması güvenlidir.

Örnek

Aşağıdaki örnek bir türü gösterir, UseReadOnly kuralı ve türü ihlal eder, UseConstant kuralı karşılar.

Imports System

Namespace PerformanceLibrary

   ' This class violates the rule.
   Public Class UseReadOnly

      Shared ReadOnly x As Integer = 3
      Shared ReadOnly y As Double = x + 2.1
      Shared ReadOnly s As String = "readonly"

   End Class

   ' This class satisfies the rule.
   Public Class UseConstant

      Const x As Integer = 3
      Const y As Double = x + 2.1
      Const s As String = "const"

   End Class

End Namespace
using System;

namespace PerformanceLibrary
{
   // This class violates the rule.
   public class UseReadOnly
   {
      static readonly int x = 3;
      static readonly double y = x + 2.1;
      static readonly string s = "readonly";
   }

   // This class satisfies the rule.
   public class UseConstant
   {
      const int x = 3;
      const double y = x + 2.1;
      const string s = "const";
   }
}