Tengo 2 escenarios.Ámbito 'léxico' de parámetros de tipo en C#
Esta falla: CS0102
class F<X>
{
public X X { get; set; }
}
de error: El tipo 'F<X>
' ya contiene una definición para 'X
'
Esto funciona:
class F<X>
{
class G
{
public X X { get; set; }
}
}
La única explicación lógica es que en el segundo fragmento, el parámetro de tipo X está fuera del alcance, lo que no es cierto ...
¿Por qué un parámetro de tipo afecta mis definiciones en un tipo?
IMO, por coherencia, ambos deberían funcionar o ninguno debería funcionar.
¿Alguna otra idea?
PD: Yo lo llamo 'léxico', pero probablemente no es el término correcto.
Actualización:
De acuerdo con la respuesta de Henk, aquí es una versión no genérica que muestra el mismo comportamiento, pero quizás más fácil de asimilar.
falla:
class F
{
class X { }
public X X { get; set; }
}
Obras:
class X { }
class F
{
public X X { get; set; }
}
Por lo que puedo ver, el compilador de C# crea un ámbito léxico en la definición de tipo de limites.
También implica que los tipos y nombres de miembros viven en la misma 'ubicación' (o namespace
en términos de LISP).
No veo por qué la primera no debería funcionar, ¿alguien capaz de reproducir el error del compilador? –
@Ori: solo pruébalo. :) – leppie
De acuerdo con su actualización, parece que Marcelo respondió su pregunta: demostró lo mismo. – Kobi