【问题标题】:C# allows reversed reference to nested class?C# 允许反向引用嵌套类?
【发布时间】:2010-12-02 23:40:33
【问题描述】:

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

【问题讨论】:

标签: c# .net nested-class


【解决方案1】:

这是因为你的嵌套类继承自它们嵌套的类。

P3是一个P2,它是一个P1,它有一个嵌套的P2。

【讨论】:

  • 请注意,如果您通过派生类引用静态成员,Resharper(可能还有 VS)会警告您,这有助于缓解此类混淆。
【解决方案2】:

我刚刚将您的代码粘贴到编译器中并在 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。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2013-11-16
    • 2014-06-18
    • 2018-01-14
    • 2015-08-02
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多