我有以下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?
为什么是类型,
obj1C而不是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()。
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |