Colección de citas famosas - Slogan de motivación - Problema de reflexión en C# --- ¿Cómo obtener el valor de retorno en un método mediante la reflexión?

Problema de reflexión en C# --- ¿Cómo obtener el valor de retorno en un método mediante la reflexión?

En primer lugar, comprenda los principios básicos de la reflexión. De lo contrario, es posible que el código que describo a continuación le confunda un poco.

La reflexión es un mecanismo importante en .NET. A través de la reflexión, puede obtener miembros e información de miembros de cada tipo (incluidas clases, estructuras, delegados, interfaces, enumeraciones, etc.) en un programa o ensamblado en tiempo de ejecución. Con la reflexión, puedes conocer todos los tipos a la vez. Alternativamente, puede crear un objeto directamente, incluso si el tipo del objeto no se conoce en el momento de la compilación. ?

El proceso básico de reflexión es el siguiente, asegúrese de leerlo. Una vez completado, escribiré el código correspondiente para usted.

(1) Utilice ensamblaje para definir. y cargar el ensamblaje, cargar enumera el módulo en el manifiesto del ensamblaje, encuentra el tipo de este ensamblaje y crea una instancia de ese tipo. ?

(2) Utilice Módulo para obtener información sobre el ensamblado que contiene el módulo y las clases en el módulo. También puede obtener todos los métodos globales u otros métodos no globales específicos definidos en el módulo. ?

(3) Utilice ConstructorInfo para conocer el nombre, los parámetros, los modificadores de acceso (como púlico o privado) y los detalles de implementación (como abstracto o virtual) del constructor. ?

(4) Utilice MethodInfo para conocer el nombre del método, el tipo de retorno, los parámetros, los modificadores de acceso (como púlico o privado) y los detalles de implementación (como abstractos o virtuales), etc.

(5) Utilice FiedInfo para comprender el nombre del campo, los modificadores de acceso (como público o privado) y los detalles de implementación (como estático), etc., y obtener o establecer el valor del campo.

(6) Utilice EventInfo para conocer el nombre del evento, el tipo de datos del controlador de eventos, las propiedades personalizadas, el tipo de declaración y el tipo de reflexión, etc., y agregue o elimine controladores de eventos. ?

(7) Utilice PropertyInfo para conocer el nombre, tipo de datos, tipo de declaración, tipo de reflexión, estado de solo lectura o escritura del atributo, etc., y obtener o establecer el valor del atributo. ?

(8) Utilice ParameterInfo para comprender el nombre del parámetro, el tipo de datos, si es un parámetro de entrada o un parámetro de salida, y la posición del parámetro en la firma del método, etc.

//Carga el ensamblado (dirección del archivo dll), usa la clase Assembly

Assembly?assembly?=?Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory?+?"Bin/App_Code.dll");?

//Obtener tipo, parámetros (espacio de nombres + clase)

Tipo?type?=?assembly.GetType("assembly_name.assembly_class");

//Crear una instancia del objeto, tipo de objeto, parámetros (espacio de nombres + clase)

object?instance?=?assembly.CreateInstance("assembly_name.assembly_class");

//Establezca el tipo de parámetro en el método Show_Str, tipo Type[]; si hay varios parámetros, puede agregar varios

Type[]?params_type?=?new?Type[1];?

params_type[0]?=?Type.GetType("System.String");?

//Establezca el valor del parámetro en el método Show_Str si hay varios parámetros; puedes agregar varios

Object[]?params_obj?=?new?Object[1];?

params_obj[0]?=?"jiaopeng";?

// Ejecutar el método Show_Str

object?value?=?type.GetMethod("Show_Str",?params_type).Invoke(instance,?params_obj);