2

我有一个名为 GamePlay 的 ViewController 类。在 GamePlay 中有一个名为 MyPinAnnotationView 的嵌套类。当调用 MyPinAnnotation 的方法 TouchesBegan() 时,我想从父 GamePlay 调用方法 CheckAnswer()。

我不想创建新的 GamePlay 实例,因为我已经设置了变量和实例。我可以通过某种方式访问​​父母吗?(事件监听器除外)

4

4 回答 4

11

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

class MyPinAnnotationView
{
  private GamePlay gamePlay;

  public MyPinAnnotationView(GamePlay gamePlay)
  {
    this.gamePlay = gamePlay;
  }

  public void TouchesBegan()
  {
    this.gamePlay.CheckAnswer();
  }
}

当您MyPinAnnotationView从实例化时GamePlay,只需执行以下操作:

MyPinAnnotation annotation = new MyPinAnnotation(this);
于 2009-11-09T18:25:51.683 回答
1

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

于 2009-11-09T18:21:48.250 回答
1

简单/快速的方法是在子对象中保留对父类的引用,CheckAnswer()公开,然后在需要时很容易调用该方法......但您可能需要返回并查看设计以确保这一点是合适的。

于 2009-11-09T18:22:44.613 回答
0

嵌套类只能由父类使用(参见这篇文章)。除非有非常好的理由,否则它们不应该对其他班级公开可见。没有。

我建议重构这个。尝试将所有 API for 移动GamePlayGamePlay类中。换句话说,TouchesBegan()应该在GamePlay类上调用,然后再调用到MyPinAnnotations类中。

没有其他人应该知道MyPinAnnotations类 - 如果他们需要,那么它表明设计失败。

于 2009-11-09T18:23:49.493 回答