C#动态编译

C#提供了DynamicObject和IDynamicMetaObjectProvider两种方式实现动态类型,动态类型的好处是类型的公有接口可以在运行时改变。

创建动态类型最简单的方法就是继承DynamicObject,需要实现的方法有TryGetMember和TrySetMember。

如果你必须使用其他基类,那么还可以手工实现IDynamicMetaObjectProvider。

一.具体例子:实现一个可以动态添加属性包的类

 public class ViewBag:System.Dynamic.DynamicObject
{
private Dictionary<string, object> storage = new Dictionary<string, object>(); public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (storage.ContainsKey(binder.Name))
{
result = storage[binder.Name];
return true;
} result = null;
return false;
} public override bool TrySetMember(SetMemberBinder binder, object value)
{
string key = binder.Name; if (storage.ContainsKey(key))
{
storage[key] = value;
}
else
{
storage.Add(key, value);
} return true;
} public override string ToString()
{
StringBuilder strSb = new StringBuilder(); foreach (var item in storage)
{
strSb.AppendFormat("property {0}:{1} ",item.Key,item.Value);
} return strSb.ToString();
} }

二 使用如下

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

上一篇:【java学习笔记】序列化、反序列化


下一篇:(转)HTML5实战与剖析之触摸事件(touchstart、touchmove和touchend)