实现自己的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();
}
}
例:
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
- 实现自己的Dynamic类型
- dynamic 类型
- Json.net实现方便的Json转C#(dynamic动态类型)对象
- Json.net实现方便的Json转C#(dynamic动态类型)对象
- PB中dynamic调用类型的用法
- 对引用类型 dynamic 的理解
- .net中dynamic类型的使用
- 实现extjs的Dynamic Grid
- 编写自己的CMFCEditBrowseCtrl,实现打开指定类型的文件
- 编写自己的CMFCEditBrowseCtrl,实现打开指定类型的文件
- 写出自己自定义类型转换器的实现步骤及代码
- Dynamic Proxy模式的简单实现
- Dynamic proxy 与cglib的简单实现
- C#中的dynamic类型
- 动态类型Dynamic
- 【C#dynamic 类型】
- dynamic 动态类型 教你写不可思议的C#代码
- Dynamic 动态类型 和双问号??的使用
- LUA与python根本就不具有可比性
- Hadoop-2.2.0学习之二HDFS联盟
- sybase 如何查看license状态
- OpenCart网站后台执行数据库SQL语句功能插件
- 为我们的数据添加附件
- 实现自己的Dynamic类型
- 字和字节的常识
- C++设计模式3-适配器模式Adapter-不兼容结构的接口协调
- 阿里巴巴云梯(收藏)
- ArcGIS栅格图像重分类C#代码实现
- CentOS网络下载安装Tomcat7
- struts2 jsp获取session属性值
- c#Winform中调用WPF窗体
- cassandra install & troubleshooting