告诉我在C#4.0中使用新的“动态”关键字的方法

时间:2008-11-19 10:28:18

标签: .net dynamic c#-4.0

这是版本4.0中称为动态的新C#未来。告诉我如何在我的代码中使用它以及这个未来如何帮助我?


相关问题:

4 个答案:

答案 0 :(得分:3)

Anders Hejlsberg做了一个名为“C#的未来”的精彩PDC会议。有一个关于使用动态关键字的非常好的演示:

http://channel9.msdn.com/pdc2008/TL16/

答案 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

请在此处查看答案 https://stackoverflow.com/questions/244302/what-do-you-think-of-the-new-c-4-0-dynamic-keyword/2243818#2243818

答案 3 :(得分:2)

其中一个用法是静态和动态语言之间的互操作。

假设您要从Silverlight调用JavaScript函数:

HtmlPage.Window.Invoke("HelloWorldFunction");

如果窗口是动态的(并且已正确实现),您可以像这样使用它:

HtmlPage.Window.HelloWorldFunction();