我可以限制哪些类可以实例化另一个类吗?

时间:2012-02-03 10:20:37

标签: c# oop

  

可能重复:
  Factory pattern in C#: How to ensure an object instance can only be created by a factory class?

假设我有一个知道如何制作Square的Factory类。如果我觉得只有Factory类知道如何制作一个正方形并且我想阻止其他人(即使在同一个程序集中)创建一个正确的(如果有这样的东西)那么方法呢?

3 个答案:

答案 0 :(得分:6)

根据您的具体情况,您可以这样做:

public class Square
{
    // Only Square and classes nested within it can call this
    private Square()
    {
    }

    public class Factory
    {
        public Square CreateSquare()
        {
            return new Square();
        }
    }
}

然后:

Square.Factory factory = new Square.Factory();
Square square = factory.CreateSquare();

答案 1 :(得分:2)

您可以将工厂和类移动到程序集,并将类的构造函数标记为内部,以便只能从程序集中调用它。

请注意,这将允许其他程序集成员访问构造函数,而不仅仅是工厂。

这就是Lookup<TKey, TElement>的工作原理。

答案 2 :(得分:2)

我看到的一种方式(使用工厂和同一程序集中的Square)将工厂方法作为Square类的静态方法移动,并仅向{{{}添加私有构造函数1}} class。

您还可以将Square课程移动为Factory的内部课程:

Square