C#允许反向引用嵌套类?

时间:2010-12-02 23:40:33

标签: c# .net nested-class

这是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中编译得很好。

2 个答案:

答案 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。

这是我的理解。如果我错了,请纠正我。