Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Dynamic;
- namespace Receptas.Cap04
- {
- public class DiccionarioDinamico : DynamicObject
- {
- private IDictionary<string, object> dict = new Dictionary<string, object>();
- // Propiedad estática:
- public int Contador
- {
- get
- {
- Console.WriteLine ("Se ha invocado la propiedad `Contador`.");
- return dict.Count;
- }
- }
- public override bool TryGetMember (GetMemberBinder binder, out object result)
- {
- Console.WriteLine ("Solicitud de miembro dinámico: {0}", binder.Name);
- return dict.TryGetValue (binder.Name, out result);
- }
- public override bool TrySetMember (SetMemberBinder binder, object value)
- {
- Console.WriteLine ("Solicitud de establecimiento de valor {0} para el miembro {1}",
- binder.Name, value);
- dict[binder.Name] = value;
- return true;
- }
- }
- public sealed class PruebaDiccionarioDinamico
- {
- public static void Main()
- {
- // Declaración variable dynamic:
- dynamic dynDict;
- // Encapsulación de variable de `DiccionarioDinamico` sobre
- // la variable `dynDict`:
- dynDict = new DiccionarioDinamico();
- // Creación dinámica de propiedades, y asignación
- // de valores:
- Console.WriteLine ("\nCreación de propiedades y asignación valores:");
- dynDict.PrimerNombre = "John";
- dynDict.Apellido = "Ortiz";
- // Recuperación de valores de propiedades:
- Console.WriteLine ("\nObtención de los valores de las propiedades dinámicas:");
- Console.WriteLine ("\tPrimer nombre: {0}", dynDict.PrimerNombre);
- Console.WriteLine ("\tApellido: {0}", dynDict.Apellido);
- // Invocación de miembro declarado estáticamente:
- Console.WriteLine ("\nInvocación de miembro declarado estáticamente:");
- Console.WriteLine ("\tContador: {0}", dynDict.Contador.ToString());
- // Intento de invocación de una propiedad no existente:
- Console.WriteLine ("\nIntento de invocar propiedad no existente:");
- try
- {
- Console.WriteLine ("\tCiudad {0}", dynDict.Ciudad);
- }
- catch (Microsoft.CSharp.RuntimeBinder.RuntimeBinderException e)
- {
- Console.WriteLine ("\tLa propiedad `Ciudad` no ha sido declarada ni estática ni dinámicamente.");
- }
- Console.WriteLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement