C#提供了DynamicObject和IDynamicMetaObjectProvider两种方式实现动态类型,动态类型的好处是类型的公有接口能够在运行时改变。html
建立动态类型最简单的方法就是继承DynamicObject,须要实现的方法有TryGetMember和TrySetMember。ide
若是你必须使用其余基类,那么还能够手工实现IDynamicMetaObjectProvider。网站
1 public class ViewBag:System.Dynamic.DynamicObject 2 { 3 private Dictionary<string, object> storage = new Dictionary<string, object>(); 4 5 public override bool TryGetMember(GetMemberBinder binder, out object result) 6 { 7 if (storage.ContainsKey(binder.Name)) 8 { 9 result = storage[binder.Name]; 10 return true; 11 } 12 13 result = null; 14 return false; 15 } 16 17 public override bool TrySetMember(SetMemberBinder binder, object value) 18 { 19 string key = binder.Name; 20 21 if (storage.ContainsKey(key)) 22 { 23 storage[key] = value; 24 } 25 else 26 { 27 storage.Add(key, value); 28 } 29 30 return true; 31 } 32 33 public override string ToString() 34 { 35 StringBuilder strSb = new StringBuilder(); 36 37 foreach (var item in storage) 38 { 39 strSb.AppendFormat("property {0}:{1} ",item.Key,item.Value); 40 } 41 42 return strSb.ToString(); 43 } 44 45 }
dynamic bag = new ViewBag(); bag.Property1 ="test";
2.取值ui
string propertyValue= bag.Property1;
做者:B.itspa
技术收录网站:核心技术(http://www.coretn.cn)
出处:http://www.cnblogs.com/ImBit/p/5085247.html
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接。code