转发:私有构造函数的作用
一般情况下使用的是public。如果有特殊要求的情况下,可能使用private修饰。
如果一般常见的单例模式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class Singlton { private static Singleton _Instance; provate static readonly object syslocker = new object (); //私有化构造函数 private Sinalton() { } public static Singlton GetInstance() { if (_Instance == null ) { lock (syslocker) { if (_Instance == null ) { _Instance = new Singlton(); } } } return _Instance; } } |
这种形式就必须使用private将构造私有化,然后通过GetInstance()方法获得实例。这样能保存生成的实例是单一的。不允许用户使用构造函数重新构造。
不管怎么说,虽然我们可以对实例进行私有化,但必须有其他的静态方法来获得实例。如果不通过静态方法或静态属性来获得得实例,那么这么类就没有存在的必要了。
所以虽然可以私有化构造函数,但一般要因为对生成有一定的控制,否则最好还是使用public。或使用默认生成的。[不写构造函数时,编译器会默认编译一个]
列子2:
私有构造函数一般用于单件设计模式
设计了私有构造函数,客户端代码将无法通过new来实例化该对象,此时还要单独设计一个Create静态方法,利用他来创建对象。
例如:
public class CarFactory
{
private static
bool flag = false;
private CarFactory()
{
}
public static CarFactory getSpooler()
{
if (!flag)
{
flag = true;
return new CarFactory();
}
else
{
return null;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决