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

相关文章
相关标签/搜索