En reflexión tipo genérico sin construir, dicen C<>
se combinó con el tipo ejemploC<T>
.
Esto es quizás menos que teóricamente puro; Pienso en estas como entidades muy diferentes. Pienso en uno como el símbolo "C con un parámetro de tipo" y el otro como tiempo de compilación tipoC<T>
. En el código, C<>
y C<T>
no son sinónimos el uno para el otro; puedes hacer un campo del último tipo si T está dentro del alcance, pero nunca puedes hacer un campo del tipo anterior.
Sin embargo, el hecho de que la biblioteca de reflexión proporcione el tipo del tipo de instancia cuando solicita el tipo no construido no es del todo malo. ¿Qué haría do con el tipo no construido? No hay nada que realmente puedas hacer con eso. Pero con el tipo de instancia, puede decir "sustituir int para T" aquí.
El beneficio real de obtener C<T>
cuando solicita typeof(C<>)
es que esto siempre le proporciona el tipo no construido. Compare:
class C<T>
{
public static Type CT() { return typeof(C<T>); }
public static Type JustC() { return typeof(C<>); }
}
Cuando se llama CT, ¿qué vas a llamarlo en? No hay ningún tipo C<T>
para llamar a CT. Puede llamar al C<int>.CT
en cuyo caso recibirá C<int>
, no C<T>
. La única forma de obtener el tipo C<>
construido con T es solicitar typeof(C<>)
.
¿Tiene sentido?
todavía no he cubierto la reflexión (tengo una vaga idea de lo que es)
La reflexión es simplemente la biblioteca de código que le permite obtener información acerca de su código en el propio código . "typeof" le da un objeto Type que luego puede "reflejar" para encontrar información sobre el tipo.
no estoy seguro de entender lo que quiere decir con "T incluso cuando no está en el ámbito"
La forma en que dijo que era confuso. Lo he reformulado.
muy buena pregunta +1 – nawfal