实现自己的Dynamic类型

来源:互联网 发布:中国专利文献数据库 编辑:程序博客网 时间:2024/06/05 09:47
必须继承DynamicObject
例:
class ParamClass : DynamicObject
    {
        private Dictionary<string, object> values = new Dictionary<string, object>();
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = null;
            if (!values.ContainsKey(binder.Name)) return false;
            result = values[binder.Name];
            return true;
        }
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            values[binder.Name] = value;
            return true;
        }
        public override IEnumerable<string> GetDynamicMemberNames()
        {
            return values.Select(m => m.Key);
        }
        public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
        {
            if (binder.Name == "SetModel")
            {
                values = args[0] as Dictionary<string, object>;
                result = true;
                return true;
            }
            else
                return base.TryInvokeMember(binder, args, out result);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            dynamic o = new ParamClass();
            Dictionary<string, object> dic = new Dictionary<string, object>();
            dic.Add("Name","纺三");
            dic.Add("Age",15);
            o.SetModel(dic);
            var t=o.Name;
            Console.WriteLine(t);
            Console.ReadKey();
        }
    }
0 0