在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
C#提供了DynamicObject和IDynamicMetaObjectProvider两种方式实现动态类型,动态类型的好处是类型的公有接口可以在运行时改变。 创建动态类型最简单的方法就是继承DynamicObject,需要实现的方法有TryGetMember和TrySetMember。 如果你必须使用其他基类,那么还可以手工实现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 }
二 使用如下1. 为自定义属性赋值
dynamic bag = new ViewBag(); bag.Property1 ="test"; 2.取值 string propertyValue= bag.Property1;
作者:B.it 技术收录网站:核心技术(http://www.coretn.cn) |
请发表评论