这是 4.0 版中新的 C# 未来,称为动态。告诉我如何在我的代码中使用它,以及这个未来如何帮助我?
相关问题:
这是 4.0 版中新的 C# 未来,称为动态。告诉我如何在我的代码中使用它,以及这个未来如何帮助我?
相关问题:
一旦你有了一个动态对象,编译器就不会担心你可能对动态对象进行的任何方法调用。调用将仅在运行时解决。在这种情况下,方法 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 reader=new DynamicReader();
dynamic data=reader.Read();
Anders Hejlsberg 做了一个很好的 PDC 会议,名为“C# 的未来”。有一个很好的使用动态关键字的演示:
我们在 TDD 中使用 C#“动态”关键字。
此代码无法编译,因为未实现方法“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);
}
使用“动态”关键字,代码编译并且测试失败!--> TDD
其中一种用法是静态和动态语言之间的互操作。
假设您想从 silverlight 调用 JavaScript 函数:
HtmlPage.Window.Invoke("HelloWorldFunction");
如果窗口是动态的(并且正确实现),您将能够像这样使用它:
HtmlPage.Window.HelloWorldFunction();