• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#动态编译

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

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)
出处:http://www.cnblogs.com/ImBit/p/5085247.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
转:将字符串或表达式直接转为C#可执行代码的办法发布时间:2022-07-10
下一篇:
C#与OOP知识总结发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap