相关疑难解决方法(0)

为什么c#编译器在带有动态参数的调用站点检查方法的"静态"?

为什么C#编译器不告诉我这段代码无效?

class Program
{
    static void Main(string[] args)
    {
        dynamic d = 1;
        MyMethod(d);
    }

    public void MyMethod(int i) 
    {
        Console.WriteLine("int");
    }
}
Run Code Online (Sandbox Code Playgroud)

调用MyMethod在运行时失败,因为我试图从静态方法调用非静态方法.这是非常合理的,但为什么编译器在编译时不认为这是一个错误?

以下内容无法编译

class Program
{
    static void Main(string[] args)
    {
        dynamic d = 1;
        MyMethod(d);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以尽管动态调度,编译器会检查是否MyMethod存在.为什么不验证"静态"?

c# static dynamic c#-4.0

22
推荐指数
1
解决办法
332
查看次数

标签 统计

c# ×1

c#-4.0 ×1

dynamic ×1

static ×1