阻止访问构造函数/仅特定 class 可以访问

Prevent access to constructor / only specific class has access

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

这意味着除了 AppleFactory Class。

如何做到这一点?

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

你可以使Apple抽象,然后在AppleFactory.

中创建一个private子类

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

如果你想一个不同的类型作为工厂,那么最接近的是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();
}

你可以让 Apple class 成为它自己的工厂。

public class Apple
{
    private Apple()
    {}

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

真正的苹果工厂可以调用这个工厂方法:

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

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