我有以下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?
答案 0 :(得分:4)
运行应用程序后,为什么
obj1
C
而不是A
的类型?
出于同样的原因,当您进行此修改时,obj1
的类型为C
:
A obj1 = A.amethod();
虽然静态已知类型obj1
为A
,但其运行时类型为C
,因为这是amethod()
返回的内容。
当您将obj1
的类型更改为dynamic
时,分配给它的值仍为C
。但是,编译器承诺不会打扰任何静态类型检查,所以如果你这样做
obj1.SomeMethod();
代码会编译,但除非您更改C
以实现SomeMethod()
,否则它会在运行时中断。