He estado mirando a través de un cierto código en un proyecto de código abierto recientemente y encontraron muchas ocurrencias de este tipo de código:C# Copia variable de instancia de variable local en funciones de la misma clase
class SomeClass
{
private int SomeNumber = 42;
public ReturnValue UseSomeNumber(...)
{
int someNumberCopy = this.SomeNumber;
if (someNumberCopy > ...)
{
// ... do some work with someNumberCopy
}
else
{
// ... do something else with someNumberCopy
}
}
}
¿Hay algún beneficio real para hacer una copia de la variable de instancia?
Uno de los beneficios es la seguridad de rosca libre de bloqueo – adrianm
No es típico ver este patrón utilizado para copiar un campo entero, pero veo y uso esto a menudo cuando hago referencia a campos que podrían establecerse como nulos en otro hilo. Es solo una pequeña parte de un diseño seguro para subprocesos, pero esto es importante para evitar condiciones de carrera difíciles de encontrar. –
@Dan: o, para crear condiciones de carrera difíciles de encontrar. Cuando haces una copia, terminas con una raza * diferente *. Ahora la carrera es que la copia está hecha, y luego se cambia el valor original, y ahora la función hace un cálculo sobre datos obsoletos. –