Si intento definir la siguiente clase Pair<A, B> en C#, aparece un error de compilación.
public class Pair<A, B> { public Pair(A a, B b) { this.A = a; this.B = b; } public AA { get; } public BB { get; } }El error del compilador es:
error CS0102: The type 'Pair<A, B>' already contains a definition for 'A' error CS0102: The type 'Pair<A, B>' already contains a definition for 'B'
¿Dónde están las definiciones conflictivas?
Por lo general, se puede definir una propiedad con el mismo nombre que su tipo, por ejemplo:
public Guid Guid { get; } public Uri Uri { get; } ¿Por qué el compilador se queja de los nombres A y B ?
Se especifica en la sección "Miembros de la clase" en el estándar de C#. En la rama draft-v6 actual:
El nombre de un parámetro de tipo en type_parameter_list de una declaración de clase será diferente de los nombres de todos los demás parámetros de tipo en la misma type_parameter_list y será diferente del nombre de la clase y los nombres de todos los miembros de la clase.
En otras palabras, no puede obtener un parámetro de tipo con el mismo nombre que otro parámetro de tipo o un miembro de clase. Aquí, tiene un parámetro de tipo llamado A y una propiedad llamada A .
El hecho de que el tipo de propiedad sea también A es irrelevante; este código da el mismo error:
class Broken<T> { public string T { get; set; } }