C#4.0入门 第一章 dynamic类型—第二页 匿名类型(转)

■ dynamic类型与匿名类型

匿名类型是指没有名字,也没有单独定义的类型。严格说来,该类型还是有名字的,只是在C#的源代码中我们看不到这个名字。但是,在4.0版本之前,匿名类型可以被有效利用的范围并不是很大。因为要想在一个方法之外要利用匿名类型并不是不可能的,但是要想在方法之外利用匿名类型,就一定要使用反射。


但是,dynamic类型把这个问题很容易地就给解决了。如果作为dynamic类型来返回,访问它的内容就很简单了。


访问使用dynamic类型与匿名类型的对象




 
using System;
class Program
{
private static dynamic GetObject()
{
return new { YourName = "亚洲队", YourScore = 1000 };
}
static void Main(string[] args)
{
dynamic a = GetObject();
Console.WriteLine("{0}的分数为{1}分。",
a.YourName, a.YourScore);
}
}


上例的执行结果




 亚洲队的分数为1000分。



当然,因为在C#中该类型没有被单独定义,所以即使写错了要访问成员的名字,也不会引起编译错误,而是在运行时抛出异常。

■ dynamic总结
把dynamic总结的内容进行总结一下。

dynamic类型为运行时才解释的类型。

可以访问编译时不知道类型的对象的信息。

只要名字保持一致,可以统一访问任何类型,哪怕不知道类型的对象信息。

使匿名类型的使用变得更容易。

拼错要访问成员的名字不会产生编译错误,而是运行时抛出异常。

虽然不知道类型也可以访问对象,但是会以少量性能为代价。


不能绝对地说dynamic类型是把不可能变成可能的类型。在这之前,使用反射也可以实现相同功能,dynamic类型只是使这一切变得更加简单容易了。



如果对于它会影响性能这一点很介意的话,也有相应的对策,就是采用并行。同时并灵活地使用系统资源,可以有效地把性能上的不利方面减少到最低限度。我们在下一章对此进行介绍。

posted @ 2011-06-11 15:59  董雨  阅读(315)  评论(0编辑  收藏  举报