C# 单例单例属性
不做过多解释,非面向大众
using System;
namespace EasyAVG
{
public static class SingletonProperty<T> where T : class
{
private static readonly object locker = new object();
private volatile static T instance = null;
public static T Instance
{
get
{
if (instance == null)
{
lock (locker)
{
if (instance == null)
{
instance = Activator.CreateInstance<T>();
}
}
}
return instance;
}
}
public static void Unload() => instance = null;
public static void Reload() => instance = Activator.CreateInstance<T>();
}
}
namespace EasyAVG
{
public abstract class Singleton<T> where T : Singleton<T>
{
public static T Instance => SingletonProperty<T>.Instance;
protected Singleton() { }
public static void Unload() => SingletonProperty<T>.Unload();
public static void Reload() => SingletonProperty<T>.Reload();
}
}
Unity Mono单例 /单例属性模板
using UnityEngine;
namespace EasyAVG
{
public static class MonoSingletonProperty<T> where T : MonoBehaviour
{
private static T instance = null;
public static T Instance
{
get
{
if (instance == null) InitializeAfterSceneLoad();
return instance;
}
}
public static void InitializeAfterSceneLoad()
{
if (instance != null) return;
GameObject container = new GameObject(typeof(T).Name);
UnityEngine.Object.DontDestroyOnLoad(container);
instance = container.AddComponent<T>();
}
public static void Unload()
{
UnityEngine.Object.Destroy(instance.gameObject);
instance = null;
}
public static void Reload()
{
Unload();
InitializeAfterSceneLoad();
}
}
}
using UnityEngine;
namespace EasyAVG
{
public class MonoSingleton<T> : MonoBehaviour where T : MonoSingleton<T>
{
protected MonoSingleton() { }
public static T Instance => MonoSingletonProperty<T>.Instance;
public static void SingletonInitializeAfterSceneLoad() => MonoSingletonProperty<T>.InitializeAfterSceneLoad();
public static void Unload() => MonoSingletonProperty<T>.Unload();
public static void Reload() => MonoSingletonProperty<T>.Reload();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统