我一直在打破我的大脑,想弄清楚如何在C#中做到这一点。我有一个TextGrid类,它本质上是一个MxN文本网格。我想要一个Cursor类来维护TextGrid中的(X,Y)位置,以及移动位置,查询当前位置等的方法。理想情况下,我希望这个类不是可以在TextGrid之外创建,因为它没有逻辑地连接到TextGrid,它是无用的。
然而,我解决这个问题的方法还不尽如人意:我已经尝试过1)Cursor是一个嵌套在TextGrid中的公共类,带有私有构造函数,2)Cursor是嵌套在TextGrid中的私有类,带有public构造函数,以及3)Cursor是TextGrid之外的公共构造函数。 #1不起作用,因为由于私有构造函数,我无法从TextGrid中实例化Cursor。 #2不起作用,因为由于访问限制,我无法在TextGrid之外返回创建的Cursor对象(例如GetCursor()方法)。并且#3完全没有帮助。
相当多,我想要做的就是在C#中使用Java的Iterator。这可能吗?
答案 0 :(得分: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()
{
}
}
答案 1 :(得分:2)
虽然使用接口来解决问题是一种很好的方法,但如果您只想让Cursor
类的每个实例都与TextGrid
类的实例相关联,那么您只需要创建者将类型为TextGrid
的参数传递给构造函数:
public class Cursor
{
public Cursor(TextGrid owner)
{
...
}
}