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";
}
}