Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Reflection;
- namespace Recetas.Cap03
- {
- // Declaración de clase con diferentes tipos de miembros:
- public class ClaseDemo
- {
- // Campos:
- private int campo;
- // Propiedades:
- public int Propiedad
- {
- get
- {
- return campo;
- }
- set
- {
- campo = value;
- }
- }
- // Constructor:
- public ClaseDemo (ref int x)
- {
- x *= 5;
- }
- // método `ToString` sobrescrito:
- public override String ToString()
- {
- return campo.ToString();
- }
- }
- public sealed class UsoInvokeMember
- {
- public static void Main()
- {
- // Representación `Type` de `ClaseDemo`:
- Type tipo = typeof (ClaseDemo);
- // Arreglo con argumentos:
- Object[] args = new Object[] {8};
- Console.WriteLine ("\n === Creación de una instancia de `{0}` === \n", tipo.Name.ToString());
- Console.WriteLine ("\tValor del elemento en la posición 0 de `args` antes de crear una instancia: {0}", args[0]);
- // Crea un instancia `ClaseDemo`:
- Object obj = tipo.InvokeMember( null,
- BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Public |
- BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args
- );
- Console.WriteLine ("\n\tTipo en `obj`: {0}", obj.GetType().ToString());
- Console.WriteLine ("\tValor del elemento en la posición 0 de `args` después de crear una instancia: {0}", args[0]);
- // Escribe un valor para el campo `campo`, lo lee y lo almacena en la
- // variable int `valor`:
- Console.WriteLine ("\n\n === Escritura y Lectura del campo `campo` de `{0}` === \n", tipo.Name.ToString());
- tipo.InvokeMember("campo",
- BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
- BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5}
- );
- int valor = (int) tipo.InvokeMember("campo",
- BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
- BindingFlags.Instance | BindingFlags.GetField, null, obj, null
- );
- Console.WriteLine ("\tValor de `campo`: {0}", valor.ToString());
- // Invoca al método `ToString` y guarda el valor de retorno en `cadena`:
- Console.WriteLine ("\n\n === Lectura del campo `campo` de `{0}` === \n", tipo.Name.ToString());
- String cadena = (String) tipo.InvokeMember ("ToString",
- BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
- BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null
- );
- // Muestra el resultado de la invocación:
- Console.WriteLine ("\tLlamada a `ToString` sobre `obj`: {0}", cadena);
- // Establece y recupera un valor de la propiedad `Propiedad`:
- Console.WriteLine ("\n\n === Establecimiento y recuperación de valor la propiedad `Propiedad` de `{0}` === \n", tipo.Name.ToString());
- tipo.InvokeMember ("Propiedad",
- BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
- BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2}
- );
- valor = (int) tipo.InvokeMember ("Propiedad",
- BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
- BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null
- );
- Console.WriteLine ("\tValor de `Propiedad`: {0}\n", valor.ToString());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement