这是Microsoft C#编译器中的错误,还是语法服务于我不知道的目的?
class P1
{
class P2 : P1
{
class P3 : P2
{
void Foo()
{
P3 p3 = this as P2.P3;
P2 p2 = this as P3.P2; // ?!?
}
};
};
};
编辑:我应该提一下,它在VS2010中编译得很好。
答案 0 :(得分:5)
这是有效的,因为您的嵌套类继承自它们嵌套的类。
P3是P2,它是P1,具有嵌套的P2。
答案 1 :(得分:0)
我只是将您的代码粘贴到编译器中并在dll上运行反汇编程序。
.method private hidebysig instance void Foo() cil managed
{
// Code size 6 (0x6)
.maxstack 1
.locals init ([0] class ProjectEuler.P1/P2/P3 p3,
[1] class ProjectEuler.P1/P2 p2)
IL_0000: nop
IL_0001: ldarg.0
IL_0002: stloc.0
IL_0003: ldarg.0
IL_0004: stloc.1
IL_0005: ret
}// end of method P3::Foo
所以看看生成的IL,我觉得'this'代表p2虽然技术上更像是p3。但P3也是P2,因为P3来自P2。
这是我的理解。如果我错了,请纠正我。