Dynamic 方法参数在C语言中可以是动态的吗#
在c#4.0中,是否可以使用动态方法参数,如下面的代码Dynamic 方法参数在C语言中可以是动态的吗#,dynamic,parameters,methods,c#-4.0,Dynamic,Parameters,Methods,C# 4.0,在c#4.0中,是否可以使用动态方法参数,如下面的代码 public string MakeItQuack(dynamic duck) { string quack = duck.Quack(); return quack; } 我在C#4.0中有许多很酷的动态关键字示例,但与上面不同。这个问题当然是受到python工作原理的启发。是的,您可以这样做。正如C#4.0规范中所述,语法被扩展以支持动态类型: 类型: … 动态 当然,这包括参数定义。是;见例 或者克里斯的其他博客。或者抓取
public string MakeItQuack(dynamic duck)
{
string quack = duck.Quack();
return quack;
}
我在C#4.0中有许多很酷的动态关键字示例,但与上面不同。这个问题当然是受到python工作原理的启发。是的,您可以这样做。正如C#4.0规范中所述,语法被扩展以支持
动态类型:
类型:
…
动态
当然,这包括参数定义。是;见例
或者克里斯的其他博客。或者抓取VS2010 Beta2并试用。是的,您完全可以这样做。出于静态重载解析的目的,它被视为对象
参数(静态调用)。然后,您在方法中所做的将是动态的。例如:
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");
}
}
“dynamic is like object”的本质意味着不能让一个重载只包含一个对象
参数,而让一个重载只包含一个动态
参数。请参阅文档注意,这篇文章意味着后期绑定效率非常低。强打字是你的朋友@大卫:DLR中的动态行为做得非常巧妙,尽可能地高效。是的,它是后期绑定的,但它并不像您预期的那么低效。如果我正确理解ChrisB()更新的这篇文章,那么这种行为似乎已经改变了。听起来调用总是动态调度的,重载是根据运行时确定的参数类型选择的。@BitMask777:仅当其中一个参数(或目标)是动态的时。所以在我回答的代码中,Foo(“hello”)
没有任何动态参数,因此Foo(dyanmic)
是静态绑定的。