Llamadas de método genérico con comprobaciones de tipos genéricos.
Estoy tratando de generalizar algunas llamadas repetitivas de método en un constructor. Tengo algunas entidades y estoy tratando de llamar métodos estándar si han implementado algunas de las interfaces. Aquí está lo que estoy tratando de lograr en el código:
¿Hay alguna manera de comprobar el tipo de un tipo genérico y pasarlo a otro método genérico?
davy.ai
Sí, hay una forma de verificar el tipo de un tipo genérico y pasarlo a otro método genérico. Una opción es utilizar el operador
typeof
para obtener el tipo deT
en tiempo de ejecución y luego utilizar la reflexión para invocar el método apropiado según la(s) interfaz(es) que implementeT
. Aquí hay una implementación de ejemplo que demuestra esta aproximación:En esta implementación, primero utilizamos
typeof(IIdentifiable).IsAssignableFrom(t)
para verificar siT
implementa la interfazIIdentifiable
. Si es así, utilizamos la reflexión para obtener el métodoHandleIdentifiable
y crear una versión genérica de él conMakeGenericMethod(t)
. Luego, invocamos ese método conInvoke(this, new object[] { constructor })
, pasando el parámetroconstructor
.Seguimos un proceso similar para la interfaz
ITrackable
. Tenga en cuenta que estamos suponiendo queHandleIdentifiable
yHandleTrackable
son ambos métodos de instancia privados deYourClass
(o cualquier clase en la que se definaHandleStandards
).Este enfoque puede ser útil si tiene muchas interfaces diferentes que desea verificar y manejar de forma genérica. Sin embargo, tiene algunas desventajas: puede ser más lento que simplemente verificar si
T
implementa una interfaz y luego llamar al método correspondiente directamente, y puede ser más propenso a errores debido al uso de la reflexión. Si solo tiene algunas interfaces para manejar y / o prefiere un enfoque más simple y directo, es posible que desee considerar simplemente verificar cada interfaz una por una y luego llamar al método correspondiente directamente.