La costante non può essere contrassegnata come statica


Risposte:


197

constimplica static(non è necessaria un'istanza per fare riferimento al constvalore).

Voglio aggiungere anche questo punto importante: quando si collega a (riferimento) un assembly con a public const, quel valore viene copiato nell'assembly. Quindi, se il constvalore nell'assembly a cui si fa riferimento cambia, l'assembly avrà ancora il valore originariamente compilato.

Se questo comportamento non è accettabile, dovresti considerare di trasformare il campo in un public static readonlycampo.

Lib.dll, fornito come binario:

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

App.exe, fa riferimento a 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

Da MSDN :

Non creare una costante per rappresentare le informazioni che ti aspetti di cambiare in qualsiasi momento. Ad esempio, non utilizzare un campo costante per memorizzare il prezzo di un servizio, il numero di versione di un prodotto o il nome del marchio di un'azienda. Questi valori possono cambiare nel tempo e, poiché i compilatori propagano le costanti , altro codice compilato con le librerie dovrà essere ricompilato per vedere le modifiche.

Da DotNetPerls :

DLL. Quando si utilizza un constcampo o una dichiarazione, il compilatore C # incorpora effettivamente il constvalore della variabile direttamente nel codice IL. Pertanto, essenzialmente cancella il constcome entità separata.

Attenzione: se i programmi che dipendono da a constnon vengono ricompilati dopo la constmodifica del valore, potrebbero interrompersi [ perché continueranno a utilizzare il valore precedente ].


15

Una costante è statica per definizione.


è applicato anche alla finale in Java
Basheer AL-MOMANI

@ BasheerAL-MOMANI: No. Una finale è semplicemente immutabile dopo la chiamata del costruttore. Niente di più.
juergen d

9

Non puoi avere const statico. Prova in sola lettura invece di const o semplicemente elimina "static" poiché "const" è comunque statico implicito.


4

Le costanti non possono essere sostituite nel codice durante la compilazione, non durante il runtime, quindi non sono richieste definizioni statiche e di istanza.


3

Tutte le dichiarazioni di costanti sono implicitamente statiche e la specifica C # afferma che l'inclusione (ridondante) del modificatore statico è vietata. Credo che questo sia per evitare la confusione che potrebbe verificarsi se un lettore vedesse due costanti, una dichiarata statica e l'altra no - potrebbe facilmente presumere che la differenza nella specifica implicasse una differenza nella semantica. Detto questo, non vi è alcun divieto di specificare in modo ridondante un modificatore di accesso che è anche quello predefinito, dove c'è una scelta. Ad esempio, un metodo (concreto) può essere contrassegnato esplicitamente come privato nonostante sia l'impostazione predefinita. La regola sembra essere che dove non c'è scelta (ad esempio una dichiarazione di metodo in un'interfaccia) il modificatore ridondante è proibito. Dove c'è una scelta, è permesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.