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

Kha*_*har 1 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()
}
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 5

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

对于为什么类型相同的原因obj1就是C当你做这样的修改:

A obj1 = A.amethod();
Run Code Online (Sandbox Code Playgroud)

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

当更改obj1to 的类型时,为其dynamic分配的值仍然保留C。但是,编译器保证不会打扰您进行任何静态类型检查,因此如果您这样做,

obj1.SomeMethod();
Run Code Online (Sandbox Code Playgroud)

该代码可以编译,但是除非您更改C为Implement,否则它将在运行时中断SomeMethod()。