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