C# 单例模式 简单例子
时间: 2023-08-03 11:41:12 浏览: 184
当一个类只需要被实例化一次时,就可以使用单例模式。下面是一个简单的 C# 单例模式的例子:
```csharp
public sealed class Singleton
{
private static Singleton instance = null;
private static readonly object padlock = new object();
Singleton()
{
}
public static Singleton Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
}
```
在这个例子中,`Singleton` 类只有一个私有的构造函数,所以它不能被从外部实例化。`Singleton` 类有一个静态属性 `Instance`, 它返回一个 `Singleton` 类型的实例。如果该实例还没有被创建,就通过 `lock` 语句锁定对象,创建一个新的实例并将其返回。使用 `sealed` 关键字可以防止派生出其他类。
相关问题
c#单例模式和多例模式
单例模式和多例模式是设计模式中的两种常见实现方式。
单例模式是一种创建对象的模式,它保证一个类只有一个实例,并提供一个全局访问点来访问该实例。在C#中,可以通过使用静态变量和私有构造函数来实现单例模式。以下是一个示例:
```csharp
public class Singleton
{
private static Singleton instance;
private Singleton() {} // 私有构造函数
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
```
使用单例模式可以确保在整个应用程序中只有一个实例存在,并且可以通过`Singleton.Instance`来访问该实例。
多例模式是一种可以创建有限个数实例的模式,它保证一个类最多只有指定个数的实例,并提供一个全局访问点来访问这些实例。在C#中,可以使用类似于单例模式的方式来实现多例模式,只需稍作修改即可。以下是一个示例:
```csharp
public class Multiton
{
private static Dictionary<string, Multiton> instances = new Dictionary<string, Multiton>();
private Multiton() {} // 私有构造函数
public static Multiton GetInstance(string key)
{
if (!instances.ContainsKey(key))
{
// 创建新实例并添加到字典中
instances[key] = new Multiton();
}
return instances[key];
}
}
```
使用多例模式可以创建指定个数的实例,并且可以通过`Multiton.GetInstance(key)`来访问这些实例,其中`key`是用于区分不同实例的标识符。
这是单例模式和多例模式的简单介绍,它们在实际开发中有各自的应用场景,具体使用哪种模式取决于实际需求。
c# 单例模式的场景
单例模式是一种常见的设计模式,它可以确保一个类只有一个实例,并提供一个全局访问点。在C#中,单例模式可以应用于以下场景:
1. 数据库连接池:在一个应用中,多个线程可能需要访问同一个数据库连接池,使用单例模式可以确保只有一个连接池实例存在,避免了资源浪费和线程安全问题。
2. 日志记录器:在一个应用程序中,多个模块可能需要记录日志,使用单例模式可以确保只有一个日志记录器实例存在,避免了日志记录的重复和冲突。
3. 配置文件管理器:在一个应用程序中,多个模块可能需要访问同一个配置文件,使用单例模式可以确保只有一个配置文件管理器实例存在,避免了配置文件的重复读取和冲突。
以下是一个用C#实现的单例模式示例:
```csharp
public class Singleton
{
private static Singleton instance = null;
private static readonly object padlock = new object();
private Singleton()
{
// Private constructor to prevent instantiation from outside the class
}
public static Singleton Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
}
```
阅读全文