这是版本4.0中称为动态的新C#未来。告诉我如何在我的代码中使用它以及这个未来如何帮助我?
相关问题:
答案 0 :(得分:3)
Anders Hejlsberg做了一个名为“C#的未来”的精彩PDC会议。有一个关于使用动态关键字的非常好的演示:
答案 1 :(得分:3)
一旦你拥有了一个动态对象,编译器就不会对你可能在动态对象上进行的任何方法调用感到困扰。调用仅在运行时解析。在这种情况下,方法Read()在运行时动态调度。
更美的是,C#现在可以灵活地指定如何调度动态调用。您可以实现IDynamicObject,自己编写这些绑定器。例如,看看我是如何创建一个动态的读者类,它允许你在一个实例上调用自己的方法。
public class DynamicReader : IDynamicObject
{
public MetaObject GetMetaObject
(System.Linq.Expressions.Expression parameter)
{
return new DynamicReaderDispatch (parameter);
}
}
public class DynamicReaderDispatch : MetaObject
{
public DynamicReaderDispatch (Expression parameter)
: base(parameter, Restrictions.Empty){ }
public override MetaObject Call(CallAction action, MetaObject[] args)
{
//You might implement logic for dynamic method calls. Action.name
// will give you the method name
Console.WriteLine("Logic to dispatch Method '{0}'", action.Name);
return this;
}
}
现在,dynamic关键字可用于创建动态对象,就像
一样dynamic reader=new DynamicReader();
dynamic data=reader.Read();
答案 2 :(得分:3)
我们在TDD中使用C#“dynamic”关键字。
此代码无法编译,因为“Addition”方法未实现
[TestMethod()]
public void CalculatorThingAdd_2PositiveNumbers_ResultAdded()
{
CalculatorThing myCalculator = new CalculatorThing();
int result = 0;
int expcected = 3;
// --> CalculatorThing does not contain a definition for 'Addition'
result = myCalculator.Addition(1, 2);
Assert.AreEqual(result, expcected);
}
使用“dynamic”关键字编译代码并且测试失败! - > TDD
答案 3 :(得分:2)
其中一个用法是静态和动态语言之间的互操作。
假设您要从Silverlight调用JavaScript函数:
HtmlPage.Window.Invoke("HelloWorldFunction");
如果窗口是动态的(并且已正确实现),您可以像这样使用它:
HtmlPage.Window.HelloWorldFunction();