代码之家  ›  专栏  ›  技术社区  ›  Bryan

嵌套的C类-从内部调用外部方法

  •  1
  • Bryan  · 技术社区  · 15 年前

    我有一个叫做gameplay的viewcontroller类。在Gameplay中有一个名为MyPinAnnotationView的嵌套类。当调用MyPinAnnotation的touchEsbegan()方法时,我想从父游戏中调用一个方法checkAnswer()。

    我不想创建一个新的游戏实例,因为我已经设置了变量和实例。我可以用某种方式访问家长吗?(事件侦听器除外)

    4 回复  |  直到 15 年前
        1
  •  9
  •   Asbjørn Ulsberg    15 年前

    嵌套类只能引用父类中的静态成员。如果要访问实例成员,则需要获取对该实例的引用。最简单的方法是将它作为参数添加到 MyPinAnnotationView 像这样:

    class MyPinAnnotationView
    {
      private GamePlay gamePlay;
    
      public MyPinAnnotationView(GamePlay gamePlay)
      {
        this.gamePlay = gamePlay;
      }
    
      public void TouchesBegan()
      {
        this.gamePlay.CheckAnswer();
      }
    }
    

    当你实例化 MyPinAnnotationView(MyPinAnnotationView) GamePlay 只要做到这一点:

    MyPinAnnotation annotation = new MyPinAnnotation(this);
    
        2
  •  1
  •   David Boike    15 年前

    如果要访问的方法不是静态的,则需要对父对象的引用(我通常将父对象引用作为构造函数参数传入),以便访问其方法。毕竟,您的子类需要知道它与父类的哪个实例相关。

        3
  •  1
  •   Jon Seigel    15 年前

    简单/快速的方法是在子对象中保留对父类的引用,使 CheckAnswer() public,然后在需要的时候很容易调用该方法…但您可能需要返回并检查设计,以确保这是适当的。

        4
  •  0
  •   Community CDub    8 年前

    嵌套类只能由父类使用( see this post )。除非有一个很好的理由,否则它们不应该对其他类公开可见。但没有。

    我建议对此进行重构。尝试移动的所有API GamePlay 进入 游戏性 班级。换言之, TouchesBegan() 应该在 游戏性 类,然后调用 MyPinAnnotations 班级。

    其他人都不应该知道 MyPinAnnotations(MyPin注释) 类-如果需要,则表示设计失败。