C# C允许反向引用嵌套类?
这是Microsoft C编译器中的一个bug,还是语法有我不知道的用途C# C允许反向引用嵌套类?,c#,.net,nested-class,C#,.net,Nested Class,这是Microsoft C编译器中的一个bug,还是语法有我不知道的用途 class P1 { class P2 : P1 { class P3 : P2 { void Foo() { P3 p3 = this as P2.P3; P2 p2 = this as P3.P2; // ?!? } }
class P1
{
class P2 : P1
{
class P3 : P2
{
void Foo()
{
P3 p3 = this as P2.P3;
P2 p2 = this as P3.P2; // ?!?
}
};
};
};
编辑:我应该提到,它在VS2010中编译得很好。这很有效,因为嵌套类继承自它们嵌套的类
P3是一个P2,它是一个P1,它有一个嵌套的P2。我刚刚将您的代码粘贴到编译器中,并在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,我觉得‘这’代表p2,虽然从技术上讲它是p3。但P3也是P2,因为P3源自P2
这是我的理解。如果我错了,请纠正我。请注意,如果您通过派生类引用静态成员,Resharper和可能的VS将警告您,这有助于缓解类似的混乱。谢谢,我很抱歉之前没有看到,这基本上是相似的。