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