Partager via


Utiliser des littéraux lorsque nécessaire

Mise à jour : novembre 2007

TypeName

UseLiteralsWhereAppropriate

CheckId

CA1802

Catégorie

Microsoft.Performance

Modification avec rupture

Modification sans rupture

Cause

Un champ est déclaré static et readonly (Shared et ReadOnly en Visual Basic), et est initialisé avec une valeur qui est calculable à la compilation.

Description de la règle

La valeur d'un champ staticreadonly est calculée à l'exécution lorsque le constructeur statique du type déclarant est appelé. Si le champ staticreadonly est initialisé lorsqu'il est déclaré et qu'un constructeur statique n'est pas déclaré explicitement, le compilateur émet un constructeur statique pour initialiser le champ.

La valeur d'un champ const est calculée à la compilation et stockée dans les métadonnées, ce qui améliore les performances d'exécution lorsqu'il est comparé à un champ staticreadonly.

La valeur assignée au champ ciblé étant calculable à la compilation, remplacez la déclaration par un champ const afin que la valeur soit calculée à la compilation plutôt qu'à l'exécution.

Comment corriger les violations

Pour corriger une violation de cette règle, remplacez les modificateurs static et readonly par le modificateur const.

Quand supprimer les avertissements

Il est possible de supprimer sans risque un avertissement de cette règle, voire de désactiver complètement la règle, si les performances ne sont pas un problème.

Exemple

L'exemple suivant présente un type, UseReadOnly, qui enfreint la règle et un autre, UseConstant, qui satisfait la règle.

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