当前位置:编程学习 > C#/ASP.NET >>

C#4.0中的dynamic关键字和ExpandoObject对象

我们做Web应用程序开发的程序员,我想大家对JavaScript的接触一定不少,在JavaScript中我们经常用到一个功能,就是可以随时随地的新建一个对象,然后就可以自定义的给它定义自己需要的属性,就如下面的简单例子

 

\代码
<script type="text/javascript">
function getObject(name) {
var obj = new Object();
//自定义两个属性
obj.Name = name;
obj.Sex = "男";
return obj;
}

function onbtnClick() {
var retobj = getObject("吖龙");//调用自定义的属性
alert("姓名:"+retobj.Name + " 性别:" + retobj.Sex);
}
</script>

用下面代码调用

<input type="button" id="btnTest" value="自定义属性" onclick="onbtnClick();" />

 

单击自定义属性按钮后,会像我们意料的一样获取到了相应的自定义属性值。

  曾经,我为上面的方便用法疯狂和兴奋过,这几天看到了C#4.0也提供了这种用法,更是兴奋不已,获取你已经觉得早就已经熟运于心了,请原谅我的反应迟钝和步伐慢。今天怀着分享的心给简单介绍一下C#4.0中的关键字dynamic和对象ExpendoObject对象。

  我的类型,我做主,编译器绕道过···

  dynamic最大的特点我想莫过于在它的类型在运行时才确定,这也是它与往静态类型关键字的最大区别。如果你在你的代码操作中用到了dynamic关键字去定义一个变量时,那么这个变量在编译的时候编译器不会对它进行类型检查,允许它到运行的时候再做解释。在大多数情况下,dynamic 类型与 object 类型的行为是一样的。但是,不会用编译器对包含 dynamic 类型表达式的操作进行解析或类型检查,只是将有关该变量编译到类型 object 的变量中以及有关它的操作信息打包在一起,在运行时再解释运行。像下面的代码:

            dynamic objDynamic = objDynamic + 1;//编译通过
            object objObject = objObject + 1;//编译不通过

原因就是编译器不对dynamic进行类型的检查,这也是两者最大的区别。 

  dynamic关键字可以用于很多情况,比如在声明中,作为属性、字段、索引器、参数、返回值或类型约束的类型等等,用法和其他基本类型的关键字很类似,更详细可以看Dynamic(C#参考)

   为了实现一个像上面JavaScript中的功能,在C#4.0中新添加了一个ExpandoObject对象,它位于程序集:  System.Core(在 System.Core.dll 中)命名空间:  System.Dynamic 中,他的用法和我上面举得JavaScript的用法很类似,下面偷懒一下,借用用msdn的一个例子:

 

  

  

 

\
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,