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

时间:2009-11-09 18:18:21

标签: c# iphone nested-class

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

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

4 个答案:

答案 0 :(得分:9)

嵌套类只能引用父级中的静态成员。如果要访问实例成员,则需要获取对实例的引用。最简单的方法是将它作为参数添加到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);

答案 1 :(得分:1)

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

答案 2 :(得分:1)

简单/快捷的方法是在子对象中保持对父类的引用,使CheckAnswer()公开,然后在需要时调用方法很容易......但是你可能想要回去并检查设计以确保这是合适的。

答案 3 :(得分:0)

嵌套类只能由父类(see this post)使用。除非有充分的理由,否则不应将其他类别公开显示。没有。

我建议重构一下。尝试将GamePlay的所有API移至GamePlay类。换句话说,应该在TouchesBegan()类上调用GamePlay,然后调用MyPinAnnotations类。

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