Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamic 方法参数在C语言中可以是动态的吗#_Dynamic_Parameters_Methods_C# 4.0 - Fatal编程技术网

Dynamic 方法参数在C语言中可以是动态的吗#

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规范中所述,语法被扩展以支持动态类型: 类型: … 动态 当然,这包括参数定义。是;见例 或者克里斯的其他博客。或者抓取

在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)
是静态绑定的。