Ao tentar compilar minha classe, recebo um erro:
A constante
'NamespaceName.ClassName.CONST_NAME'
não pode ser marcada como estática.
na linha:
public static const string CONST_NAME = "blah";
Eu poderia fazer isso o tempo todo em Java. O que estou fazendo de errado? E por que não me deixa fazer isso?
Na especificação da linguagem C # (página 287 do PDF - ou 300ª página do PDF):
fonte
Um membro const é considerado estático pelo compilador, além de implicar em semântica de valor constante, o que significa que as referências à constante podem ser compiladas no código de uso como valor do membro constante, em vez de uma referência ao membro.
Em outras palavras, um membro const que contém o valor 10 pode ser compilado no código que o usa como o número 10, em vez de uma referência ao membro const.
Isso é diferente de um campo estático somente leitura, que sempre será compilado como uma referência ao campo.
Observe que isso é pré-JIT. Quando o JIT'ter entra em ação, ele pode compilar esses dois no código de destino como valores.
fonte
C #
const
é exatamente a mesma coisa que Javafinal
, exceto que é absolutamente semprestatic
. Na minha opinião, não é realmente necessário que umaconst
variável seja nãostatic
, mas se você precisar acessar umaconst
variável não-static
é, você pode:Bem, agora percebo que essa pergunta foi feita há 4 anos, mas desde que dediquei cerca de 2 horas de trabalho, consistindo em tentar todos os tipos de maneiras diferentes de responder e formatar o código, nesta resposta, ainda estou postando. :)
Mas, para constar, ainda me sinto meio bobo.
fonte
final
se comporta exatamente como C #readonly
, e nemconst
um pouco.Do MSDN: http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx
... Além disso, enquanto um campo const é uma constante em tempo de compilação , o campo somente leitura pode ser usado para constantes de tempo de execução ...
Portanto, usar estática em campos const é como tentar tornar uma estática definida (com #define) em C / C ++ ... Como é substituída por seu valor no tempo de compilação, é claro que é iniciada uma vez para todas as instâncias (= estática) .
fonte
const é semelhante ao estático, podemos acessar as duas variáveis com o nome da classe, mas diff é que as variáveis estáticas podem ser modificadas e o const não.
fonte