方法参数可以在C#中动态化

时间:2009-11-12 17:16:28

标签: dynamic parameters methods c#-4.0

在c#4.0中,是否可以使用动态方法参数,如下面的代码?

public string MakeItQuack(dynamic duck)
{
  string quack = duck.Quack();
  return quack;
}

我在C#4.0中有很多很酷的动态关键字示例,但不像上面那样。这个问题当然受到python如何运作的启发。

4 个答案:

答案 0 :(得分:44)

是的,你绝对可以这样做。出于静态重载解析的目的,它被视为object参数(并静态调用)。那么你在方法中所做的就是动态的。例如:

using System;

class Program
{
    static void Foo(dynamic duck)
    {
        duck.Quack(); // Called dynamically
    }

    static void Foo(Guid ignored)
    {
    }

    static void Main()
    {
        // Calls Foo(dynamic) statically
        Foo("hello");
    }
}

“动态就像对象”本质意味着只有一个object参数和一个只有dynamic参数的参数就不会有一个重载。

答案 1 :(得分:4)

答案 2 :(得分:2)

是的,你可以这样做。如C#4.0规范中所述,语法扩展为支持dynamic,只要类型是预期的:

  


   ...
  dynamic

当然,这包括参数定义。

答案 3 :(得分:0)

是;见例如。

http://blogs.msdn.com/cburrows/archive/2008/11/14/c-dynamic-part-vi.aspx

或克里斯的其他博客。或者抓住VS2010 Beta2并尝试一下。