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

Pim*_*kos 34 parameters methods dynamic c#-4.0

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

public string MakeItQuack(dynamic duck)
{
  string quack = duck.Quack();
  return quack;
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

"动态就像对象"本质意味着你不能只有一个object参数只有一个重载而只有一个dynamic参数.

  • @ BitMask777:仅当*参数*(或目标)之一是动态的时.所以在我的答案的代码中,`Foo("hello")`没有任何动态参数,所以`Foo(dyanmic)`是静态绑定的. (2认同)