100 votes

La constante ne peut pas être marquée statique

Je suis en train de déclarer une constante PI comme ceci:

public static const double PI = Math.PI;

mais pourquoi j'obtiens cette erreur?

The constant 'Calendar.NewCalendar.PI' cannot be marked static

205voto

Jonathon Reinhart Points 40535

const implique static (vous n'avez pas besoin d'une instance de référence de l' const de la valeur).

Je veux aussi ajouter ce point important: Lorsque vous liez contre (de référence), une assemblée avec un public const, cette valeur est copiée dans votre assemblée. Donc, si l' const de la valeur de l'assembly référencé changements, votre assemblée sera toujours à l'origine compilé en valeur.

Si ce comportement n'est pas acceptable, alors vous devriez envisager de faire le champ public static readonly champ.

// Lib.dll, provided as binary
public class Foo {
    public const int HATS = 42;
    public static readonly int GLOVES = 33;
}

// App.exe, references Lib.dll
Foo.HATS    // This will always be 42 even if the value in Lib.dll changes,
            // unless App.exe is recompiled.

Foo.GLOVES  // This will always be the same as Foo.GLOVES in Lib.dll

15voto

juergen d Points 85039

Une constante est statique par définition.

9voto

itsme86 Points 6733

Vous ne pouvez pas avoir static const. Essayez readonly au lieu de const ou tout simplement tomber le "statique" depuis "const" est implicite statique de toute façon.

4voto

Daniel Becroft Points 336

Les constantes ne peuvent pas être remplacés dans le code lors de la compilation, pas de l'exécution, donc il n'y a pas d'exigence pour la statique vs instance de définitions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X