【发布时间】:2011-12-27 16:46:31
【问题描述】:
为什么 C# 编译器不告诉我这段代码无效?
class Program
{
static void Main(string[] args)
{
dynamic d = 1;
MyMethod(d);
}
public void MyMethod(int i)
{
Console.WriteLine("int");
}
}
对MyMethod 的调用在运行时失败,因为我试图从静态方法调用非静态方法。这很合理,但是为什么编译器在编译时不认为这是一个错误呢?
以下不会编译
class Program
{
static void Main(string[] args)
{
dynamic d = 1;
MyMethod(d);
}
}
因此,尽管动态分派,编译器确实会检查 MyMethod 是否存在。为什么不验证“静态”?
【问题讨论】:
-
请注意,这在 C# 7.3 中已更改;在链接的线程中查看我的(编辑过的)答案。