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

本文关键字:实例化 另一个 我可以 | 更新日期: 2023-09-27 18:22:16

可能重复:
C#中的工厂模式:如何确保对象实例只能由工厂类创建?

假设我有一个知道如何制作方块的Factory类。如果我觉得只有Factory类知道如何创建正方形,并且我想阻止其他人(即使是在同一个部件中)创建正方形,那么(如果有这样的事情)正确的方法是什么?

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

根据您的情况,您可以执行以下操作:

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();

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

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

例如,Lookup<TKey, TElement>就是这样工作的。

我看到的一种方法(工厂和Square在同一个程序集中)是将工厂方法移动为Square类的静态方法,并仅向Square类添加私有构造函数。

您也可以将Factory类移动为Square:的内部类

public class Square
{
    private Square()
    {
    }
    public int Size { get; set; }
    public static class Factory
    {
        public static Square CreateClass()
        {
            return new Square { Size = 10 };
        }
    }
}