.net dynamic动态加属性

  1. class Test : System.Dynamic.DynamicObject  
  2.         {  
  3.             public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result)  
  4.             {  
  5.                 if (map != null)  
  6.                 {  
  7.                     string name = binder.Name;  
  8.                     object value;  
  9.                     if (map.TryGetValue(name, out value))  
  10.                     {  
  11.                         result = value;  
  12.                         return true;  
  13.                     }  
  14.                 }  
  15.                 return base.TryGetMember(binder, out result);  
  16.             }  
  17.   
  18.             System.Collections.Generic.Dictionary<string, object> map;  
  19.   
  20.             public override bool TryInvokeMember(System.Dynamic.InvokeMemberBinder binder, object[] args, out object result)  
  21.             {  
  22.                 if (binder.Name == "set" && binder.CallInfo.ArgumentCount == 2)  
  23.                 {  
  24.                     string name = args[0] as string;  
  25.                     if (name == null)  
  26.                     {  
  27.                         //throw new ArgumentException("name");  
  28.                         result = null;  
  29.                         return false;  
  30.                     }  
  31.                     if (map == null)  
  32.                     {  
  33.                         map = new System.Collections.Generic.Dictionary<string, object>();  
  34.                     }  
  35.                     object value = args[1];  
  36.                     map.Add(name, value);  
  37.                     result = value;  
  38.                     return true;  
  39.   
  40.                 }  
  41.                 return base.TryInvokeMember(binder, args, out result);  
  42.             }  
  43.         }  
  44.         static void Main(string[] args)  
  45.         {  
  46.             dynamic t = new Test();  
  47.             string @a = "gg";  
  48.             t.set(@a,"galrj");  
  49.             Console.WriteLine(t.gg);  
  50.         }  

http://blog.csdn.net/cqims21/article/details/17613733

https://q.cnblogs.com/q/15970/

posted @ 2016-11-17 11:09  赤狐(zcm123)  阅读(627)  评论(0编辑  收藏  举报