为什么我能够在使用动态时访问静态上下文中的非静态方法

本文关键字:上下文 静态 访问 静态方法 动态 为什么 | 更新日期: 2023-09-27 18:04:47

以下代码:

class Program
{
    static void Main(string[] args)
    {
        dynamic d = 0;
        int x = Test.TestDynamic(d);
        int y = Test.TestInt(0);
    }
}
public class Test
{
    public int TestDynamic(dynamic data)
    {
        return 0;
    }
    public int TestInt(int data)
    {
        return 0;
    }
}

在Visual Studio 2013 (Update 5)中运行时,在Test行上引发编译时错误。TestInt

"非静态字段、方法或财产。"

,但不会在Test上引发相同的错误。TestDynamic线。它确实会失败,并出现运行时错误。

相同的代码会在visualstudio2015的两行上引发编译时错误。

为什么在Visual Studio 2013中没有提出相同的编译时错误?

为什么我能够在使用动态时访问静态上下文中的非静态方法

如果不创建对象的实例,就不能访问属性/方法。

class Program
{
    static void Main(string[] args)
    {
        dynamic d = 0;
        Test test = new Test();
        int x = test.TestDynamic(d);
        int y = test.TestInt(0);
    }
}
public class Test
{
    public int TestDynamic(dynamic data)
    {
        return 0;
    }
    public int TestInt(int data)
    {
        return 0;
    }
}