La constante ne peut pas être marquée comme statique


Réponses:


197

constimplique static(vous n'avez pas besoin d'une instance pour référencer la constvaleur).

Je veux également ajouter ce point important: lorsque vous liez (référence) à un assemblage avec a public const, cette valeur est copiée dans votre assemblage. Donc, si la constvaleur de l'assembly référencé change, votre assembly aura toujours la valeur compilée à l'origine.

Si ce comportement n'est pas acceptable, vous devez envisager de faire du champ un public static readonlychamp.

Lib.dll, fourni en binaire:

public class Foo {
    public const int HATS = 42;
    public static readonly int GLOVES = 33;
}

App.exe, référence 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

Depuis MSDN :

Ne créez pas de constante pour représenter des informations que vous prévoyez de changer à tout moment. Par exemple, n'utilisez pas de champ constant pour stocker le prix d'un service, un numéro de version de produit ou le nom de marque d'une entreprise. Ces valeurs peuvent changer avec le temps, et comme les compilateurs propagent des constantes , d'autres codes compilés avec vos bibliothèques devront être recompilés pour voir les changements.

De DotNetPerls :

DLL. Lorsque vous utilisez un constchamp ou une déclaration, le compilateur C # incorpore en fait la constvaleur de la variable directement dans le code IL. Par conséquent, il efface essentiellement le en consttant qu'entité distincte.

Attention: si les programmes qui dépendent de a constne sont pas recompilés après la constmodification de la valeur, ils peuvent être interrompus [ car ils continueront à utiliser la valeur précédente ].


15

Une constante est statique par définition.


est-ce appliqué sur `final` en java aussi
Basheer AL-MOMANI

@ BasheerAL-MOMANI: Non. Une finale n'est tout simplement pas modifiable après l'appel du constructeur. Rien de plus.
juergen d

9

Vous ne pouvez pas avoir de const statique. Essayez en lecture seule au lieu de const ou supprimez simplement le "statique" puisque "const" est de toute façon implicite statique.


4

Les constantes ne peuvent pas être remplacées dans le code pendant la compilation, pas au moment de l'exécution, il n'y a donc pas besoin de définitions statiques ou d'instances.


3

Toutes les déclarations de constantes sont implicitement statiques et la spécification C # stipule que l'inclusion (redondante) du modificateur static est interdite. Je crois que c'est pour éviter la confusion qui pourrait survenir si un lecteur voyait deux constantes, l'une déclarée statique et l'autre non - ils pourraient facilement supposer que la différence de spécification impliquait une différence de sémantique. Cela dit, il n'y a pas d'interdiction de spécifier de manière redondante un modificateur d'accès qui est également celui par défaut, lorsqu'il y a un choix. Par exemple, une méthode (concrète) peut être explicitement marquée comme privée bien que ce soit la méthode par défaut. La règle semble être que là où il n'y a pas de choix (par exemple une déclaration de méthode dans une interface), le modificateur redondant est interdit. Là où il y a un choix, c'est permis.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.