111 lines
3.2 KiB
C#
111 lines
3.2 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace XiaoZhiSharp.Kernels
|
|||
|
{
|
|||
|
[Obsolete]
|
|||
|
public class SingletonProviderUnsafe<T> where T : new()
|
|||
|
{
|
|||
|
SingletonProviderUnsafe() { }
|
|||
|
|
|||
|
public static T Instance
|
|||
|
{
|
|||
|
get { return SingletonCreator.instance; }
|
|||
|
}
|
|||
|
|
|||
|
class SingletonCreator
|
|||
|
{
|
|||
|
static SingletonCreator() { }
|
|||
|
internal static readonly T instance = new T();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 静态属性是有先后顺序的,如果在静态属性中使用了其他静态属性,那么被引用的静态属性必须在引用的静态属性之前定义。
|
|||
|
/// 单例模式
|
|||
|
/// </summary>
|
|||
|
/// <typeparam name="T"></typeparam>
|
|||
|
public class SingletonProvider<T> where T : new()
|
|||
|
{
|
|||
|
private static T m_instance;
|
|||
|
private static readonly object sync = new object();
|
|||
|
private SingletonProvider() { }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 用法:SingletonProvider<myclass>.Instance 获取该类的单例
|
|||
|
/// </summary>
|
|||
|
public static T Instance
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (m_instance == null)
|
|||
|
{
|
|||
|
lock (sync)
|
|||
|
{
|
|||
|
if (m_instance == null)
|
|||
|
{
|
|||
|
//Console.WriteLine("创建了一个对象 ");
|
|||
|
m_instance = new T();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return m_instance;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 泛型单例基类
|
|||
|
/// 静态属性是有先后顺序的,如果在静态属性中使用了其他静态属性,那么被引用的静态属性必须在引用的静态属性之前定义。
|
|||
|
/// </summary>
|
|||
|
/// <typeparam name="T"></typeparam>
|
|||
|
public class Singleton<T> where T : class
|
|||
|
{
|
|||
|
// 使用Lazy<T>确保线程安全的延迟初始化
|
|||
|
private static readonly Lazy<T> instance = new Lazy<T>(() => CreateInstanceOfT(), isThreadSafe: true);
|
|||
|
|
|||
|
// 提供获取单例实例的静态属性
|
|||
|
public static T Instance => instance.Value;
|
|||
|
|
|||
|
// 保护的构造函数,防止直接实例化
|
|||
|
protected Singleton()
|
|||
|
{
|
|||
|
// 在此处可以添加其他初始化逻辑
|
|||
|
}
|
|||
|
|
|||
|
// 创建T类型的实例
|
|||
|
private static T CreateInstanceOfT()
|
|||
|
{
|
|||
|
return Activator.CreateInstance(typeof(T), true) as T;
|
|||
|
}
|
|||
|
}
|
|||
|
/*示例
|
|||
|
internal class MySingletonClass : Singleton<MySingletonClass>
|
|||
|
{
|
|||
|
// 在此处可以添加其他成员或方法
|
|||
|
private MySingletonClass()
|
|||
|
{
|
|||
|
// 在此处可以添加初始化逻辑
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
internal class Test
|
|||
|
{
|
|||
|
private void Method()
|
|||
|
{
|
|||
|
// 使用单例实例
|
|||
|
MySingletonClass instance1 = MySingletonClass.Instance;
|
|||
|
MySingletonClass instance2 = MySingletonClass.Instance;
|
|||
|
|
|||
|
// 验证是否为同一实例
|
|||
|
Console.WriteLine($"instance1 == instance2: {instance1 == instance2}");
|
|||
|
|
|||
|
// 可以在这里添加其他业务逻辑...
|
|||
|
}
|
|||
|
}
|
|||
|
*/
|
|||
|
}
|