为什么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
是否存在。为什么它不验证“静态性”呢?