C#4.0新特性之(一)动态查找
C#4.0新特性之(一)动态查找在大神Anders的领导下,C#这门语言也越来越快地朝着编程语言宇宙第一神器进化,C#4.0的新特征都是围绕“动态”(dynamic)的概念的,本文我们先来看看第一个新特性:动态查找(Dynamic Lookup)。
1.初识dynamic
动态查找允许动态(即在运行时)实现对某个对象的操作与对象类型的绑定,而不管这个对象是来自COM,IronPython,HTML DOM还是CLR的反射。你可以在程序中绕过编译器的类型检查,而把类型的匹配(lookup)丢给运行时去作。如果你需要对这样的对象进行操作,则会用到一个全新的类型:dynamic
dynamic是一个和之前所有CTS支持的类型都很不一样的类型,因为他不是object!确切的说,它会告知编译器“请暂时别把我当成任何object!”。看上去这和过去的反射很类似,但是dynamic可以让我们在代码里就可以直接实现对这个未知类型对象的操作,下面我们通过一个例子来说明dynamic带来的便利。我的电脑上安装了一种叫X雷的下载软件,它提供了一些COM组件可供调用,在过去,我需要这样来调用这个COM对象:
<div class="cnblogs_code">http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttp://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gifwithout Dynamic <div class="cnblogs_code_open" style="display: none;"><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->privatestaticvoidNoDynamicCall(Stringurl="http://www.sunhao.cc/temp/lgxz.wma")
{
TypethunderAgent;
objectobjThunderAgent;
object[]parameter=newobject[14];
if(url!=null&&url.Length>0)
{
thunderAgent=Type.GetTypeFromProgID("ThunderAgent.Agent");
objThunderAgent=Activator.CreateInstance(thunderAgent);
parameter[0]=url;//url
parameter[1]="";
parameter[2]="";
parameter[3]="";
parameter[4]=url;//refurl
parameter[5]=-1;
parameter[6]=0;
parameter[7]=-1;//threadCount
parameter[8]="";//strCookie
parameter[9]="";
parameter[10]="";
parameter[11]=1;
parameter[12]="";
parameter[13]=-1;
thunderAgent.InvokeMember("AddTask5",BindingFlags.InvokeMethod,null,objThunderAgent,parameter);
object[]parm=newobject[1]{1};
thunderAgent.InvokeMember("CommitTasks2",BindingFlags.InvokeMethod,null,objThunderAgent,parm);
}
}
页:
[1]