C4.0和VS2010新特性(6)
时间:2025-04-20
时间:2025-04-20
介绍VS2010的新特性等一些新功能
看到这里,你就不会认为dynamic和var是“差不多”的概念了(var无非是根据赋值的类型编译器自己判断;且var不能作为函数返回值类型,但是dynamic可以)。 或许有人会疑问:dynamic可以完全替代类似像简单工厂、抽象工厂一类的东西了咯?我的理解是——不对!从上面的定义中可以得知:dynamic必须首先获取对象实例,然后动态反射是它做的事情;如果完全取代反射,实例也获取不到,如何反射呢?真是“巧妇难为无米之炊”啊!
说道dynamic可以作为返回值,下面给出一个例子:
class DynamicClass
{
public int Num1 { get; set; }
public int Num2 { get; set; }
public DynamicClass(int n1, int n2)
{
Num1 = n1;
Num2 = n2;
}
public dynamic DynamicAction
{ get; set; }
}
主函数注意咖啡色部分:
static void Main(string[] args)
{
DynamicClass t = new DynamicClass(1, 2);
t.DynamicAction = new Func<int, int, double>((x, y) => x + y); Console.WriteLine(t.DynamicAction.Invoke(t.Num1,t.Num2)); }
道理很简单:因为dynamic类型可以赋值任何东西(包括匿名委托),所以我创建了一个匿名委托给它。然后调用计算结果(匿名委托的调用使用Invoke,可以省略)。 但是……dynamic不仅仅可以动态反射类方法和属性,还可以“空中楼阁”般动态地去创建一个类方法和属性,并且赋值,相信吗?这是第二话。
(二)神奇的ExpandoObject类和自定义动态类扩展:
上一篇:量表简介总结
下一篇:协信中心商业项目提案