Lo que las diversas formas de llamar a un método en tiempo de ejecución?
-
10-10-2019 - |
Pregunta
Tengo que llamar a un método en un objeto, pero no sé el nombre del método hasta que el tiempo de ejecución.
¿Cuáles son las técnicas disponibles?
(por ejemplo. GetMethod (). Invoke (), los delegados, c # 4.0 dinámico)
Gracias!
Solución
La funcionalidad dynamic
C # 4.0 va a ser la forma más sencilla de hacerlo. En un sentido muy real, dynamic
es "sólo un envoltorio" en torno a la reflexión. Es un muy bien envoltorio, sin embargo, que es probablemente su mejor opción.
Otras formas, en aproximadamente el creciente nivel de dificultad:
- El uso de un Reflexión de terceros biblioteca. No está seguro de lo que hay en estos días.
- Escribir su propio Reflexión código.
- Utilice el CodeDOM a crear código que llama al método desea llamar.
- Emit IL que hace más o menos lo mismo que la CodeDOM código generado.
- Crear C # código fuente que se compila en un conjunto que se puede llamar, que a su vez llama a la deseada método.
Los tres últimos no son para los débiles de corazón. Su mejor opción es utilizar dynamic
o escribir su propio código de Reflexión. Si hubiera tenido dynamic
tres años atrás, cuando estaba escribiendo código para algo similar, yo he utilizado.
Otros consejos
Se puede utilizar la reflexión para las funciones de llamada que no conoce el nombre de hasta el tiempo de ejecución. He aquí algunos doc:
http://msdn.microsoft.com/ en-us / library / f7ykdhsy% 28VS.80% 29.aspx