您的位置:首页 > 移动开发 > Objective-C

自定义动态对象

2014-09-25 21:28 190 查看
1,自定义动态对象需要继承DynamicObject类
2,可根据需要,重写不同的DynamicObject方法
-----------------------------------------------------DynamicClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Dynamic;
namespace ConsoleApplication3
{
public class DynamicClass:DynamicObject
{
Dictionary<string, object> _dynamicData = new Dictionary<string, object>();
/// <summary>
/// 为获取成员值的操作提供实现
/// </summary>
/// <param name="binder"></param>
/// <param name="result"></param>
/// <returns></returns>
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
bool success = false;
result = null;
if (_dynamicData.ContainsKey(binder.Name))
{
result = _dynamicData[binder.Name];
success = true;
}
else
{
result = "Property Not Found";
success = false;
}
return success;
}
/// <summary>
/// 为设置成员值的操作提供实现
/// </summary>
/// <param name="binder"></param>
/// <param name="value"></param>
/// <returns></returns>
public override bool TrySetMember(SetMemberBinder binder, object value)
{
_dynamicData[binder.Name]= value;
return true;
}
}
}
-----------------------------------------------------主程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Dynamic;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
dynamic dyn = new DynamicClass();
dyn.name = "a";
dyn.aa = new Func<string,string>(r => r);
dyn.name = "b";
Console.WriteLine(dyn.name+"|"+ dyn.aa("b")); //输出:b|b
Console.ReadKey();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息