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
.
Voir la documentation http://msdn.Microsoft.com/en-us/library/dd264741 (VS.100) .aspx
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.
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.