MonoBehaviour单例的另外一种省事的写法

复制代码
 1 using UnityEngine;
 2 
 3 public class CommSystem: SingletonGeneric<CommSystem>
 4 {
 5     public static string version = "v1.0";
 6     private static CommSystemStub stub = (new GameObject("CommSystemStub")).AddComponent<CommSystemStub>();
 7 }
 8 
 9 public sealed class CommSystemStub : MonoBehaviour
10 {
11     private void Awake()
12     {
13         DontDestroyOnLoad(gameObject);
14     }
15 
16     private void Start()
17     {
18         
19     }
20 
21     private void Update()
22     {
23         
24     }
25 
26     private void OnDestroy()
27     {
28 
29     }
30 }
复制代码
CommSystem是普通的Class
复制代码
 1 public class SingletonGeneric<T> where T: class, new()
 2 {
 3     static private T _instance;
 4     static private readonly object th_safe = new object();
 5     static public T Instance
 6     {
 7         get
 8         {
 9             if (_instance == null)
10             {
11                 lock (th_safe)
12                 {
13                     if (_instance == null)
14                         _instance = new T();
15                 }
16             }
17             return _instance;
18         }
19     }
20 }
复制代码

 下面的改写让泛型单例支持使用Private的构造函数,这样做更严谨:

复制代码
 1 using System;
 2 
 3 public class SingletonGeneric<T> where T: class
 4 {
 5     static private T _instance;
 6     static private readonly object th_safe = new object();
 7     static public T Instance
 8     {
 9         get
10         {
11             if (_instance == null)
12             {
13                 lock (th_safe)
14                 {
15                     if (_instance == null)
16                         //_instance = new T();
17                         _instance = (T) Activator.CreateInstance(typeof(T), true);
18                 }
19             }
20             return _instance;
21         }
22     }
23 }
复制代码

 

posted @   非法关键字  阅读(692)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示