Question

J'ai une classe ViewController appelé GamePlay. En GamePlay il y a une classe imbriquée appelée MyPinAnnotationView. Lorsque la méthode de la MyPinAnnotation touchesBegan () est appelée, je veux appeler une méthode CheckAnswer () du GamePlay parent.

Je ne veux pas créer une nouvelle instance de GamePlay parce que j'ai des variables et des instances déjà définies. Puis-je accéder au parent d'une certaine façon? (Autres que les écouteurs d'événement)

Était-ce utile?

La solution

La classe imbriquée ne sera en mesure de faire référence à des membres statiques dans le parent. Si vous voulez accéder aux membres de l'instance, vous devez obtenir une référence à l'instance. La façon la plus simple de le faire est d'ajouter comme paramètre au constructeur de MyPinAnnotationView comme ceci:

class MyPinAnnotationView
{
  private GamePlay gamePlay;

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

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

Lorsque vous instanciez MyPinAnnotationView de GamePlay, faites ceci:

MyPinAnnotation annotation = new MyPinAnnotation(this);

Autres conseils

Si les méthodes que vous souhaitez accéder ne sont pas statiques, alors vous aurez besoin d'une référence à l'objet parent (je passe généralement la référence de l'objet parent en tant que paramètre constructeur) afin d'accéder à ses méthodes. Après tout, votre classe enfant a besoin de savoir quelle instance de la classe parent, il est lié à.

La façon simple / rapide serait de conserver une référence à la classe parente dans l'objet enfant, rendre public CheckAnswer(), il est facile d'appeler la méthode en cas de besoin ... mais vous pouvez revenir en arrière et revoir la conception pour vous assurer que cela est approprié.

Les classes imbriquées ne devraient être utilisés par la classe parente (

scroll top