C#動態編譯

 

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 }

 

二 使用以下

1. 爲自定義屬性賦值
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

相關文章
相關標籤/搜索