如何限制一个类只能在另一个类中创建?
问题描述:
我一直在打破我的大脑,弄清楚如何在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。这可能吗?
答
使用#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()
{
}
}
答
,如果你只是想有一个实例相关联的Cursor
类的每个实例在TextGrid
类的,你可以简单地要求创建者TextGrid
类型的参数传递给构造函数,例如:
public class Cursor
{
public Cursor(TextGrid owner)
{
...
}
}
这个美丽的工作,虽然我不得不做一些重新布线级,哈哈。谢谢! – 2010-08-08 08:25:27