¿Cuál es el equivalente de Java finalen C #?
c#
access-modifiers
reserved-words
Nosrama
fuente
fuente

Respuestas:
La
finalpalabra clave tiene varios usos en Java. Se corresponde con las palabras clavesealedyreadonlyen C #, según el contexto en el que se utiliza.Clases
Para evitar subclases (herencia de la clase definida):
Java
C#
Métodos
Prevenir la anulación de un
virtualmétodo.Java
C#
Como señala Joachim Sauer, una diferencia notable entre los dos lenguajes aquí es que Java marca por defecto todos los métodos no estáticos como
virtual, mientras que C # los marca comosealed. Por lo tanto, solo necesita usar lasealedpalabra clave en C # si desea detener la anulación adicional de un método que se ha marcado explícitamentevirtualen la clase base.Variables
Para permitir que solo se asigne una variable una vez:
Java
C#
Como nota al margen, el efecto de la
readonlypalabra clave difiere del de laconstpalabra clave en que lareadonlyexpresión se evalúa en tiempo de ejecución en lugar de tiempo de compilación , por lo que permite expresiones arbitrarias.fuente
readonlylas variables miembro se pueden modificar en los constructores: pastebin.com/AzqzYGiADepende del contexto.
finalclase o método, el equivalente de C # essealed.finalcampo, el equivalente de C # esreadonly.finalvariable local o parámetro de método, no hay un equivalente directo de C #.fuente
For a final local variable or method parameter, there's no direct C# equivalentuna gran distinción.constsolo se puede usar en tipos de valor. Hasta donde sé, no hay forma de hacer una constante efectiva para un tipo de referencia local.Lo que falta a todos aquí es la garantía de Java de asignación definitiva para las variables miembro finales.
Para una clase C con la variable de miembro final V, cada ruta de ejecución posible a través de cada constructor de C debe asignar V exactamente una vez: no asignar V o asignar V dos o más veces dará como resultado un error.
La palabra clave de solo lectura de C # no tiene esa garantía: el compilador está más que feliz de dejar miembros de solo lectura sin asignar o permitirle asignarlos varias veces dentro de un constructor.
Entonces, final y readonly (al menos con respecto a las variables miembro) definitivamente no son equivalentes: final es mucho más estricto.
fuente
Como se mencionó,
sealedes un equivalente definalpara métodos y clases.En cuanto al resto, es complicado.
Para los
static finalcampos,static readonlyes lo más cercano posible. Le permite inicializar el campo estático en un constructor estático, que es bastante similar al inicializador estático en Java. Esto se aplica tanto a las constantes (primitivas y objetos inmutables) como a las referencias constantes a objetos mutables.El
constmodificador es bastante similar para las constantes, pero no puede configurarlas en un constructor estático.readonlyse puede utilizar. Sin embargo, no es igual:finalrequiere exactamente una asignación incluso en constructor o inicializador.No hay un equivalente de C # para una
finalvariable local que yo sepa. Si se pregunta por qué alguien lo necesitaría: puede declarar una variable antes de un if-else, switch-case o algo así. Al declararlo final, usted impone que se asigne como máximo una vez.Las variables locales de Java en general deben asignarse al menos una vez antes de leerse. A menos que la rama salte antes de leer el valor, se asigna una variable final exactamente una vez. Todo esto se verifica en tiempo de compilación. Esto requiere un código de buen comportamiento con menos margen para un error.
En resumen, C # no tiene un equivalente directo de
final. Si bien Java carece de algunas características agradables de C #, es refrescante para mí, principalmente como programador de Java, ver dónde C # no puede ofrecer un equivalente.fuente
Clase de Java final y método final -> sellado. Variable miembro Java final -> solo lectura para constante de tiempo de ejecución, constante para constante de tiempo de compilación.
No hay equivalente para la Variable local final y el argumento del método final
fuente
http://en.csharp-online.net/CSharp_FAQ:_What_are_the_differences_between_CSharp_and_Java_constant_declarations
Las constantes de C # se declaran utilizando la palabra clave const para las constantes de tiempo de compilación o la palabra clave de solo lectura para las constantes de tiempo de ejecución. La semántica de las constantes es la misma en los lenguajes C # y Java.
fuente
sellado
fuente