我可以限制哪些类可以实例化另一个类吗
本文关键字:实例化 另一个 我可以 | 更新日期: 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 };
}
}
}