在c#4.0中,是否可以使用动态方法参数,如下面的代码?
public string MakeItQuack(dynamic duck)
{
string quack = duck.Quack();
return quack;
}
我在C#4.0中有很多很酷的动态关键字示例,但不像上面那样。这个问题当然受到python如何运作的启发。
答案 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并尝试一下。