¿Cuál es el equivalente de Java final
en C #?
c#
access-modifiers
reserved-words
Nosrama
fuente
fuente
Respuestas:
La
final
palabra clave tiene varios usos en Java. Se corresponde con las palabras clavesealed
yreadonly
en 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
virtual
mé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 lasealed
palabra clave en C # si desea detener la anulación adicional de un método que se ha marcado explícitamentevirtual
en la clase base.Variables
Para permitir que solo se asigne una variable una vez:
Java
C#
Como nota al margen, el efecto de la
readonly
palabra clave difiere del de laconst
palabra clave en que lareadonly
expresión se evalúa en tiempo de ejecución en lugar de tiempo de compilación , por lo que permite expresiones arbitrarias.fuente
readonly
las variables miembro se pueden modificar en los constructores: pastebin.com/AzqzYGiADepende del contexto.
final
clase o método, el equivalente de C # essealed
.final
campo, el equivalente de C # esreadonly
.final
variable 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# equivalent
una gran distinción.const
solo 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ó,
sealed
es un equivalente definal
para métodos y clases.En cuanto al resto, es complicado.
Para los
static final
campos,static readonly
es 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
const
modificador es bastante similar para las constantes, pero no puede configurarlas en un constructor estático.readonly
se puede utilizar. Sin embargo, no es igual:final
requiere exactamente una asignación incluso en constructor o inicializador.No hay un equivalente de C # para una
final
variable 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