阻止访问构造函数/仅特定类具有访问权限

时间:2017-12-06 15:38:00

标签: c# .net architecture software-design

我们说我有一个Apple Class和一个AppleFactory类。 没有人应该能够使用Apple redApple = new Apple()。相反,新的苹果应该只能从AppleFactory.Create()创建。

这意味着除了AppleFactory Class之外,所有人都无法访问Apple的构造函数。

如何做到这一点?

编辑:Apple更像是AppleModel。所以那里只有属性。

3 个答案:

答案 0 :(得分:2)

如果您想要其他类型作为工厂,那么您可以获得的最接近的是internal

public sealed class Apple() {
    internal Apple() {} 
}
public class AppleFactory() {
    public Apple CreateApple() => new Apple();
}

但是,如果您可以在Apple上将工厂作为静态方法,那么您可以保留所有内容private

public sealed class Apple() {
    private Apple() {} 
    public static Apple Create() => new Apple();
}

答案 1 :(得分:1)

您可以将Apple抽象化,然后在private中创建AppleFactory子类。

但是,您无法阻止其他人创建自己的子类。

答案 2 :(得分:1)

您可以让Apple课程成为自己的工厂。

public class Apple
{
    private Apple()
    {}

    internal static Apple Create()
    {
        var apple = new Apple();
        // TODO: Initialize
        return apple;
    }
}

真正的Apple工厂可以调用此工厂方法:

public class AppleFactory() {
    public CreateApple() => Apple.Create();
}

通过使Apple.Create()内部,您可以将其使用限制为当前程序集。构造函数只能在ins Apple中调用,因为它是private

相关问题