使用动态数据类型的方法重载



为什么编译器以以下方式限制重载方法,编译错误我在带有动态类型参数的更新方法中得到。

错误 - 类型"程序"已定义具有相同参数类型的名为"update"的成员

static void update(string name)
{
}
static void update(object name)
{
}
static void update(dynamic name)
{
}

当您使用dynamic参数类型时,即

static void update(dynamic name)
{
}

编译器将方法的签名更改为使用object,即

static void update(object name)
{
}

然后在方法主体中插入一些"魔术",以便name视为动态类型对象。然而,这引入了一个重要的限制:你不能有另一种需要objectupdate方法,因为你已经有一个。

从语言设计者的角度考虑这种重载:当你看到objectdynamic之间的重载调用时,将没有直观理解的方法来解决平局,因为objectdynamic都可以容纳任何类型的对象。因此,无论如何都应该禁止这样的重载,无论dynamic的底层实现如何。

因为dynamic也是一种object。您可以检查生成的 IL 代码。所以它给出了编译错误

static void update(object name)
{
}
static void update(dynamic name)
{
} 

最新更新