Consideremos el siguiente ejemplo de código:C pregunta # alcance
// line #
{ // 1
// 2
{ // 3
double test = 0; // 4
} // 5
// 6
double test = 0; // 7
} // 8
Esto da el error
Una variable local llamada 'prueba' no se pueden declarar en este ámbito, ya que daría un significado diferente a 'test', que ya se utiliza en un ámbito 'niño' para denotar algo más
Pero no entiendo por qué? La variable de prueba externa comienza en la línea 7 y no en la línea 2, entonces, ¿dónde está el problema para declarar una segunda variable llamada prueba en la línea 4 con un alcance que termina en la línea 5?
El mensaje de error dice prácticamente todo. Los diseñadores de idiomas lo hicieron de esta manera para alentar a las personas a utilizar diferentes nombres de variables dentro de un bloque delimitado para evitar confusiones, a pesar de que podrían haber escrito el alcance más estrictamente. Por lo tanto, las variables en ámbitos secundarios deben tener nombres exclusivos. –
http://blogs.msdn.com/b/ericlippert/archive/2009/11/02/simple-names-are-not-so-simple.aspx – LukeH
Esto es, creo, un ejemplo del 'pozo del éxito' filosofía en el diseño de las diversas partes de .NET (ref http://blogs.msdn.com/b/brada/archive/2003/10/02/50420.aspx) – AakashM