c# - usar - qué son los atributos de clase estáticos
Las clases estáticas se pueden usar como argumentos de tipo a través de la reflexión (1)
Como se afirma en el comentario de BJ Myers, el CLR no tiene conocimiento de las clases "estáticas". Los errores del compilador están ahí para evitar que haga cosas que pueden causar problemas graves. Casi siempre hay formas de evitar la mayoría de los errores como este (en este caso usando reflexión), pero el error al tratar de pasar la clase estática como parámetro es una buena indicación de que no debería estar haciendo lo que está haciendo a menos que sepa muy bien cuales son las repercusiones
En este caso, deberías preguntarte, ¿por qué quieres aprobar una clase estática? Dado que una clase estática no puede tener referencias a datos u otros objetos, no tiene sentido pasar esto. Si necesita llamar funciones en una clase estática sin tener una referencia explícita a la misma, puede usar la reflexión para invocar sus métodos. Aquí hay una respuesta que explica que:
Al intentar utilizar una clase estática como un parámetro de tipo, el compilador C # lanzará un error:
var test = new List<Math>();
error CS0718: `System.Math '': las clases estáticas no se pueden usar como argumentos genéricos
Esto ha sido cubierto en estas preguntas:
- C # - los tipos estáticos no se pueden usar como argumentos de tipo
- C # Los tipos estáticos no se pueden usar como parámetros
Sin embargo, me acabo de dar cuenta de que puedo crear el tipo a través de la reflexión, y el tiempo de ejecución no se quejará:
var test = Activator.CreateInstance(typeof(List<>).MakeGenericType(typeof(Math)));
¿Estoy en lo cierto al concluir que esto es compatible con el nivel de CLR, pero no en el nivel de idioma?
¿O se trata de un área gris en las especificaciones, lo que significa que debo abstenerme de utilizar estos tipos genéricos construidos?