为什么动态变量的类型与运行时方法的返回类型不同?

时间:2015-02-06 03:48:37

标签: c# dynamic

我有以下C#代码:

public class A
{
    public static A amethod()
    {
        return new C()
    }

}

public class C : A
{        
}

static void Main(string[] args)
{
    dynamic obj1 = A.amethod()
}

为什么运行应用程序后obj1的类型是C而不是A?

1 个答案:

答案 0 :(得分:4)

  

运行应用程序后,为什么obj1 C而不是A的类型?

出于同样的原因,当您进行此修改时,obj1的类型为C

A obj1 = A.amethod();

虽然静态已知类型obj1A,但其运行时类型为C,因为这是amethod()返回的内容。

当您将obj1的类型更改为dynamic时,分配给它的值仍为C。但是,编译器承诺不会打扰任何静态类型检查,所以如果你这样做

obj1.SomeMethod();

代码会编译,但除非您更改C以实现SomeMethod(),否则它会在运行时中断。