web-dev-qa-db-fra.com

Les paramètres de méthode peuvent-ils être dynamiques en C #

En c # 4.0, les paramètres de méthode dynamique sont-ils possibles, comme dans le code suivant?

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

J'ai de nombreux exemples sympas du mot-clé dynamique en C # 4.0, mais pas comme ci-dessus. Cette question est bien sûr inspirée par le fonctionnement de python.

Oui, vous pouvez absolument le faire. Aux fins de la résolution de surcharge statique, il est traité comme un paramètre object (et appelé statiquement). Ce que vous faites dans la méthode sera alors dynamique. Par exemple:

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

La nature "dynamique est comme un objet" signifie que vous ne pouvez pas avoir une surcharge avec juste un paramètre object et une avec juste un paramètre dynamic.

44
Jon Skeet
4
Alexandra Rusina

Oui, tu peux faire ça. Comme indiqué dans la spécification C # 4.0, la grammaire est étendue pour prendre en charge dynamic partout où un type est attendu:

type:
...
dynamic

Cela inclut bien sûr les définitions des paramètres.

2
Mehrdad Afshari

Oui; voir par exemple.

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

ou les autres blogs de Chris. Ou prenez VS2010 Beta2 et essayez-le.

0
Brian