自定义动态对象
1,自定义动态对象需要继承DynamicObject类
2,可根据需要,重写不同的DynamicObject方法
-----------------------------------------------------DynamicClass.cs
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Dynamic;namespaceConsoleApplication3{publicclassDynamicClass:DynamicObject{Dictionary<string,object>_dynamicData=newDictionary<string,object>();///<summary>///为获取成员值的操作提供实现///</summary>///<paramname="binder"></param>///<paramname="result"></param>///<returns></returns>publicoverrideboolTryGetMember(GetMemberBinderbinder,outobjectresult){boolsuccess=false;result=null;if(_dynamicData.ContainsKey(binder.Name)){result=_dynamicData[binder.Name];success=true;}else{result="PropertyNotFound";success=false;}returnsuccess;}///<summary>///为设置成员值的操作提供实现///</summary>///<paramname="binder"></param>///<paramname="value"></param>///<returns></returns>publicoverrideboolTrySetMember(SetMemberBinderbinder,objectvalue){_dynamicData[binder.Name]=value;returntrue;}}}
-----------------------------------------------------主程序
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Dynamic;namespaceConsoleApplication3{classProgram{staticvoidMain(string[]args){dynamicdyn=newDynamicClass();dyn.name="a";dyn.aa=newFunc<string,string>(r=>r);dyn.name="b";Console.WriteLine(dyn.name+"|"+dyn.aa("b"));//输出:b|bConsole.ReadKey();}}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。