zoukankan      html  css  js  c++  java
  • C#动态编译

     

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

    核心技术(http://www.localyc.com)
  • 相关阅读:
    没有精神分裂的测试不是一个好家长
    防火墙中配置开放 8080端口--续上一篇
    rocketMQ(一)基础环境
    如何做一个对账系统
    通用对账系统介绍与设计(上)
    pdf转图片
    虚拟机加载类机制
    jenkins
    zookeeper和dubbo
    正则日常积累
  • 原文地址:https://www.cnblogs.com/ImBit/p/5085247.html
Copyright © 2011-2022 走看看