2010-08-08 44 views
7

我一直在打破我的大脑,弄清楚如何在C#中做到这一点。我有一个TextGrid类,它基本上是一个MxN文本网格。我想有一个Cursor类,它在TextGrid中保持一个(X,Y)的位置,以及移动位置,查询当前位置等的方法。理想情况下,我希望这个类不是可以在TextGrid之外创建,因为它没有用在逻辑上连接到TextGrid上。我试过了1)游标是一个公共类,内嵌在TextGrid中,并带有一个私有构造函数,2)游标是一个嵌套在TextGrid中的私有类,带有公共构造函数,以及3)游标是在TextGrid外部使用公共构造函数的自己独立的公共类。 #1不起作用,因为我无法从TextGrid中实例化一个Cursor,这是由于私有构造函数的原因。 #2不起作用,因为由于访问限制,我无法返回创建的TextGrid之外的Cursor对象(例如GetCursor()方法)。而#3根本没有帮助。如何限制一个类只能在另一个类中创建?

非常多,我想要做的就是在C#中使用Java的Iterator。这可能吗?

回答

7

使用#2,但界面返回它:当使用一个接口来解决这个问题是一个好办法,

public interface ICursor 
{ 

} 

public class TextGrid 
{ 
    private class Cursor : ICursor 
    { 
    } 

    // This could be a property if it doesn't require much calculation. 
    public ICursor GetCursor() 
    { 
    } 
} 
+0

这个美丽的工作,虽然我不得不做一些重新布线级,哈哈。谢谢! – 2010-08-08 08:25:27

1

,如果你只是想有一个实例相关联的Cursor类的每个实例在TextGrid类的,你可以简单地要求创建者TextGrid类型的参数传递给构造函数,例如:

public class Cursor 
{ 
    public Cursor(TextGrid owner) 
    { 
     ... 
    } 
} 
相关问题