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}");
|
||
|
||
// 可以在这里添加其他业务逻辑...
|
||
}
|
||
}
|
||
*/
|
||
}
|