@[TOC]单例模式
泛型模板类
/// <summary>
/// 单例模板类
/// </summary>
/// <typeparam name="T"></typeparam>
public class SingletonTemplate<T> where T : class, new()
{
private static readonly object syslock = new object();
private static T m_instance;
public static T GetInstance()
{
if ((object)SingletonTemplate<T>.m_instance == null)
{
lock (SingletonTemplate<T>.syslock)
{
if ((object)SingletonTemplate<T>.m_instance == null)
SingletonTemplate<T>.m_instance = Activator.CreateInstance<T>();
}
}
return SingletonTemplate<T>.m_instance;
}
}
单例模式创建过程
/// <summary>
/// 单例模式:保证进程中,类型只有一个实例
/// a) 构造函数私有化,防止他人实例化
/// b) 对外提供一个获取实例的途径,公开的静态方法
/// c) 返回共用一个静态字段
/// </summary>
public class Singleton
{
private static readonly object syslock = new object();
private static Singleton m_instance = null;
private Singleton()
{
}
public static Singleton GetInstance()
{
///双if锁
if (m_instance==null)
{
lock (syslock)
{
if (m_instance == null)
{
m_instance=new Singleton();
}
}
}
return m_instance;
}
}
2.lazy 实现
private static readonly Lazy<ViewModel> lazy = new Lazy<ViewModel>(() => new ViewModel());
public event PropertyChangedEventHandler? PropertyChanged;
public static ViewModel Instance
{
get
{
return lazy.Value;
}
}
private ViewModel()
{
}
本文介绍了C#中Singleton Template类的实现,包括泛型模板实现的单例模式,以及lazy初始化的示例。通过实例展示了如何确保类型在进程中的唯一实例,并讨论了构造函数私有化、静态方法获取实例和共用静态字段的关键点。

1711

被折叠的 条评论
为什么被折叠?



