我们做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 + " \n性别: " + 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的一个例子:
代码
static
void
Main(
string
[] args)
{ dynamic employee, manager; employee = new ExpandoObject();//配合dynamic创建一个ExpandoObject对象
//给这个对象自定义一些属性
employee.Name = " John Smith " ; employee.Age = 33 ; manager = new ExpandoObject(); manager.Name = " Allison Brown " ; manager.Age = 42 ; manager.TeamSize = 10 ; WritePerson(manager); WritePerson(employee); } private static void WritePerson(dynamic person) { Console.WriteLine( " {0} is {1} years old. " , person.Name, person.Age);//调用属性
//
The following statement causes an exception
// if you pass the employee object. // Console.WriteLine("Manages {0} people", person.TeamSize); }
//输出"John Smith is 33 years old.";
//输出"Allison Brown is 10 years old.";
和JavaScript中的用法十分类似,从今以后,在像要序列化一些信息返回客户端等简单传值的情况下,我们也可以像JavaScript一样很方便的使用这种方法了,由于很少写文章,加上知识浅薄,文章写得乱成一团,希望大家原谅,这篇文章只是起到抛砖引玉的作用,更多的信息可以查看MSDN的技术文档ExpandoObject 类和dynamic(C# 参考) |
C#4.0中的dynamic关键字和ExpandoObject对象
最新推荐文章于 2024-06-19 11:48:01 发布