Come detto prima, statica finale in Java è lo stesso di sola lettura statica in C#. In realtà, stai dicendo che questo membro è statico e il suo contenuto non può essere modificato. Inoltre è possibile specificare in entrambi i casi il valore dal costruttore statico.
Ma const in C# è una cosa completamente diversa. È più lungo le linee delle costanti in C (direttive DEFINE) ma con OOP in mente. È statico perché è costante: ogni istanza ha questa costante con lo stesso valore, nessun costruttore può impostarla. Inoltre, è possibile che a qualcuno piacerebbe accedere alla costante senza dover creare un'istanza. Quando ci pensi, la costante non statica non ha senso. Si può quasi dire che le costanti non fanno parte di un oggetto: lo usano solo per fornire un contesto, un nome forte.
Java non ha un valore equivalente a const. È possibile leggere da qualche parte che statico finale equivale a DEFINE ma è solo così vago.Meccanismo completamente diverso, niente in comune ma alla fine il risultato è il codice stesso - migliore manutenibilità e leggibilità del codice.
Devi solo smettere di pensare alle costanti in C# come membri statici perché non lo sono. Considerali come la versione OOP di DEFINE. Quando si considera l'incapsulamento, il solo motivo per i campi finale e a lettura singola è quello di evitare che il proprio codice modifichi accidentalmente il suo valore. E questo non mi sembra costante.
Sumary:
- finale = sola lettura
- static final = statica in sola lettura
- N/A = cost
Pensavo avessi detto di aver scambiato di nuovo a Jave. Quindi, perché dovrebbe importare! ;) –
B/c ora sono curioso =) Davvero non capisco perché si tratta di un errore di compilazione se si tratta solo di affermare esplicitamente ciò che è intrinsecamente vero. – Cuga
Mmm forse perché Java non supporta le costanti direttamente, ecco perché devi usare const statico per ottenere una costante .. mentre const in C# sono statiche per natura come Greg citato e sono impostate in fase di compilazione. Alcune persone confondono statico readonly in C# che può avere il valore impostato in fase di esecuzione. – jasonco