Advertisement
Fhernd

UsoInvokeMember.cs

Aug 30th, 2014
527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.10 KB | None | 0 0
  1. using System;
  2. using System.Reflection;
  3.  
  4. namespace Recetas.Cap03
  5. {
  6.     // Declaración de clase con diferentes tipos de miembros:
  7.     public class ClaseDemo
  8.     {
  9.         // Campos:
  10.         private int campo;
  11.        
  12.         // Propiedades:
  13.         public int Propiedad
  14.         {
  15.             get
  16.             {
  17.                 return campo;
  18.             }
  19.             set
  20.             {
  21.                 campo = value;
  22.             }
  23.         }
  24.        
  25.         // Constructor:
  26.         public ClaseDemo (ref int x)
  27.         {
  28.             x *= 5;
  29.         }
  30.        
  31.         // método `ToString` sobrescrito:
  32.         public override String ToString()
  33.         {
  34.             return campo.ToString();
  35.         }
  36.     }
  37.    
  38.     public sealed class UsoInvokeMember
  39.     {
  40.         public static void Main()
  41.         {
  42.             // Representación `Type` de `ClaseDemo`:
  43.             Type tipo = typeof (ClaseDemo);
  44.            
  45.             // Arreglo con argumentos:
  46.             Object[] args = new Object[] {8};
  47.            
  48.             Console.WriteLine ("\n === Creación de una instancia de `{0}` === \n", tipo.Name.ToString());
  49.            
  50.             Console.WriteLine ("\tValor del elemento en la posición 0 de `args` antes de crear una instancia: {0}", args[0]);
  51.            
  52.             // Crea un instancia `ClaseDemo`:
  53.             Object obj = tipo.InvokeMember( null,
  54.                 BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Public |
  55.                 BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args
  56.             );
  57.            
  58.             Console.WriteLine ("\n\tTipo en `obj`: {0}", obj.GetType().ToString());
  59.             Console.WriteLine ("\tValor del elemento en la posición 0 de `args` después de crear una instancia: {0}", args[0]);
  60.            
  61.            
  62.             // Escribe un valor para el campo `campo`, lo lee y lo almacena en la
  63.             // variable int `valor`:
  64.             Console.WriteLine ("\n\n === Escritura y Lectura del campo `campo` de `{0}` === \n", tipo.Name.ToString());
  65.             tipo.InvokeMember("campo",
  66.                 BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
  67.                 BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5}
  68.             );
  69.             int valor = (int) tipo.InvokeMember("campo",
  70.                 BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
  71.                 BindingFlags.Instance | BindingFlags.GetField, null, obj, null
  72.             );
  73.            
  74.             Console.WriteLine ("\tValor de `campo`: {0}", valor.ToString());
  75.            
  76.            
  77.             // Invoca al método `ToString` y guarda el valor de retorno en `cadena`:
  78.             Console.WriteLine ("\n\n === Lectura del campo `campo` de `{0}` === \n", tipo.Name.ToString());
  79.             String cadena = (String) tipo.InvokeMember ("ToString",
  80.                 BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
  81.                 BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null
  82.             );
  83.            
  84.             // Muestra el resultado de la invocación:
  85.             Console.WriteLine ("\tLlamada a `ToString` sobre `obj`: {0}", cadena);
  86.            
  87.            
  88.             // Establece y recupera un valor de la propiedad `Propiedad`:
  89.             Console.WriteLine ("\n\n === Establecimiento y recuperación de valor la propiedad `Propiedad` de `{0}` === \n", tipo.Name.ToString());
  90.             tipo.InvokeMember ("Propiedad",
  91.                 BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
  92.                 BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2}
  93.             );
  94.             valor = (int) tipo.InvokeMember ("Propiedad",
  95.                 BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
  96.                 BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null
  97.             );
  98.            
  99.             Console.WriteLine ("\tValor de `Propiedad`: {0}\n", valor.ToString());
  100.         }
  101.     }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement