开发者

Can method parameters be dynamic in C#

In c# 4.0, are dynamic method parameters possible, like in the following code?

public string MakeItQuack(dynamic d开发者_StackOverflow中文版uck)
{
  string quack = duck.Quack();
  return quack;
}

I've many cool examples of the dynamic keyword in C# 4.0, but not like above. This question is of course inspired by how python works.


Yes, you can absolutely do that. For the purposes of static overload resolution, it's treated as an object parameter (and called statically). What you do within the method will then be dynamic. For example:

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");
    }
}

The "dynamic is like object" nature means you can't have one overload with just an object parameter and one with just a dynamic parameter.


See documentation http://msdn.microsoft.com/en-us/library/dd264741(VS.100).aspx


Yes, you can do that. As stated in C# 4.0 specification, the grammar is extended to support dynamic wherever a type is expected:

type:
       ...
      dynamic

This includes parameter definitions, of course.


Yes; see e.g.

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

or Chris' other blogs. Or grab VS2010 Beta2 and try it out.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜