Contents

stackoverflow上有人问为什么下面的代码可以编译成功,但是运行时报错:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public sealed class Example
{
int count;

public static void Foo( dynamic x )
{
Bar(x);
}

void Bar( dynamic x )
{
count++;
}
}

原因是C#如果参数中有dynamic,或者传进来的值是dynamic时,overload的检查发生在运行时,而不是编译时。MSDN上有详细的说明。

Contents