C#4.0入门 第一章 dynamic类型—第二页 匿名类型(转)
■ dynamic类型与匿名类型
匿名类型是指没有名字,也没有单独定义的类型。严格说来,该类型还是有名字的,只是在C#的源代码中我们看不到这个名字。但是,在4.0版本之前,匿名类型可以被有效利用的范围并不是很大。因为要想在一个方法之外要利用匿名类型并不是不可能的,但是要想在方法之外利用匿名类型,就一定要使用反射。
但是,dynamic类型把这个问题很容易地就给解决了。如果作为dynamic类型来返回,访问它的内容就很简单了。
匿名类型是指没有名字,也没有单独定义的类型。严格说来,该类型还是有名字的,只是在C#的源代码中我们看不到这个名字。但是,在4.0版本之前,匿名类型可以被有效利用的范围并不是很大。因为要想在一个方法之外要利用匿名类型并不是不可能的,但是要想在方法之外利用匿名类型,就一定要使用反射。
但是,dynamic类型把这个问题很容易地就给解决了。如果作为dynamic类型来返回,访问它的内容就很简单了。
访问使用dynamic类型与匿名类型的对象
|
上例的执行结果
亚洲队的分数为1000分。 |
当然,因为在C#中该类型没有被单独定义,所以即使写错了要访问成员的名字,也不会引起编译错误,而是在运行时抛出异常。
■ dynamic总结
dynamic类型为运行时才解释的类型。
可以访问编译时不知道类型的对象的信息。
只要名字保持一致,可以统一访问任何类型,哪怕不知道类型的对象信息。
使匿名类型的使用变得更容易。
拼错要访问成员的名字不会产生编译错误,而是运行时抛出异常。
虽然不知道类型也可以访问对象,但是会以少量性能为代价。
不能绝对地说dynamic类型是把不可能变成可能的类型。在这之前,使用反射也可以实现相同功能,dynamic类型只是使这一切变得更加简单容易了。
如果对于它会影响性能这一点很介意的话,也有相应的对策,就是采用并行。同时并灵活地使用系统资源,可以有效地把性能上的不利方面减少到最低限度。我们在下一章对此进行介绍。