我有一个名为GamePlay的ViewController类。在GamePlay中有一个名为MyPinAnnotationView的嵌套类。当MyPinAnnotation的方法TouchesBegan()被调用时,我想从父GamePlay中调用方法CheckAnswer()。嵌套的C#类 - 从内部调用外部方法
我不想创建一个新的GamePlay实例,因为我已经设置了变量和实例。我可以通过某种方式访问家长吗? (除了事件监听器)
我有一个名为GamePlay的ViewController类。在GamePlay中有一个名为MyPinAnnotationView的嵌套类。当MyPinAnnotation的方法TouchesBegan()被调用时,我想从父GamePlay中调用方法CheckAnswer()。嵌套的C#类 - 从内部调用外部方法
我不想创建一个新的GamePlay实例,因为我已经设置了变量和实例。我可以通过某种方式访问家长吗? (除了事件监听器)
嵌套类只能引用父代中的静态成员。如果你想访问实例成员,你需要获得对实例的引用。要做到这一点最简单的方法是把它作为一个参数添加到的MyPinAnnotationView
构造像这样:
class MyPinAnnotationView
{
private GamePlay gamePlay;
public MyPinAnnotationView(GamePlay gamePlay)
{
this.gamePlay = gamePlay;
}
public void TouchesBegan()
{
this.gamePlay.CheckAnswer();
}
}
当您从GamePlay
实例MyPinAnnotationView
,只是这样做:
MyPinAnnotation annotation = new MyPinAnnotation(this);
如果你想访问的方法不是静态的,那么你将需要一个对父对象的引用(我通常将父对象引用作为构造器参数传入)以便访问它方法。毕竟,你的子类需要知道它所关联的父类的哪个实例。
谢谢。说得通。 – Bryan 2009-11-09 21:52:16
简单/快速的方法是在子对象中保留对父类的引用,使CheckAnswer()
为公共,然后在需要时调用该方法很容易......但您可能想回顾并查看设计以确保这是适当的。
嵌套类只能由父类使用(see this post)。除非有很好的理由,否则他们不应该被其他班级公开看到。哪些没有。
我会建议重构这个。尝试将GamePlay
的所有API移动到GamePlay
类中。换句话说,TouchesBegan()
应调用GamePlay
类,然后调用MyPinAnnotations
类。
没有其他人应该知道关于MyPinAnnotations
类 - 如果他们需要,那么它表示设计失败。
这里有一个文章雷蒙德陈写了一段时间后(与我有关JScript的后记):http://blogs.msdn.com/oldnewthing/archive/2006/08/01/685248.aspx – 2009-11-09 19:29:47
还有一些关于JScript中此功能的注释: http://blogs.msdn.com/ericlippert/archive/2005/05/02/414015.aspx – 2009-11-09 19:31:58