如何限制一个类只能在另一个类中创建?

Mar*_*ine 8 c# oop

我一直在打破我的大脑,想弄清楚如何在C#中做到这一点.我有一个TextGrid类,它本质上是一个MxN文本网格.我想要一个Cursor类来维护TextGrid中的(X,Y)位置,以及移动位置,查询当前位置等的方法.理想情况下,我希望这个类不是在TextGrid之外创建,因为它没有逻辑上附加到TextGrid是没用的.

但是,我解决这个问题的方法还不尽如人意:我已经尝试过1)Cursor是一个嵌套在TextGrid中的公共类,带有私有构造函数,2)Cursor是一个嵌套在TextGrid中的私有类,带有一个公共构造函数,并且3)Cursor是TextGrid之外的公共构造函数.#1不起作用,因为由于私有构造函数,我无法从TextGrid中实例化Cursor.#2不起作用,因为由于访问限制,我无法在TextGrid之外返回创建的Cursor对象(例如GetCursor()方法).并且#3根本没有帮助.

相当多,我想要做的就是在C#中使用Java的Iterator.这可能吗?

Mat*_*hen 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()
  { 
  }
}
Run Code Online (Sandbox Code Playgroud)