gpt4 book ai didi

c# - 为什么我们需要私有(private)构造函数?

转载 作者:IT王子 更新时间:2023-10-29 03:44:48 27 4
gpt4 key购买 nike

如果一个类有一个私有(private)构造函数,那么它就不能被实例化。所以,如果我不想实例化我的类并仍然使用它,那么我可以将它设为静态。

私有(private)构造函数有什么用?

还有,在单例类中使用,但除此之外,还有其他用途吗?

(注意:我排除上面的单例情况的原因是我不明白为什么在有静态类可用的情况下我们根本需要单例。您可能不会因为我对问题的困惑而回答这个问题。)

最佳答案

工厂

私有(private)构造函数在使用工厂模式(换句话说,用于获取类实例而不是显式实例化的静态函数)时非常有用。

public class MyClass
{
private static Dictionary<object, MyClass> cache =
new Dictionary<object, MyClass>();

private MyClass() { }

public static MyClass GetInstance(object data)
{
MyClass output;

if(!cache.TryGetValue(data, out output))
cache.Add(data, output = new MyClass());

return output;
}
}

与嵌套子项的伪密封

任何从外部类继承的嵌套类都可以访问私有(private)构造函数。

例如,您可以使用它来创建一个抽象类, 可以从中继承,但其他人不能继承(内部 构造函数也可以在这里限制继承到单个程序集,但 private 构造函数强制所有实现都是嵌套类。)

public abstract class BaseClass
{
private BaseClass() { }

public class SubClass1 : BaseClass
{
public SubClass1() : base() { }
}

public class SubClass2 : BaseClass
{
public SubClass2() : base() { }
}
}

基础构造函数

它们还可用于创建从不同的、更易于访问的构造函数调用的“基本”构造函数。

public class MyClass
{
private MyClass(object data1, string data2) { }

public MyClass(object data1) : this(data1, null) { }

public MyClass(string data2) : this(null, data2) { }

public MyClass() : this(null, null) { }
}

关于c# - 为什么我们需要私有(private)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2585836/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com