zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    hdu 5972 Regular Number
    hdu 5971 Wrestling Match
    福大软工 · BETA 版冲刺前准备(团队)
    福大软工 · 第十一次作业
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    Alpha 冲刺 (5/10)
  • 原文地址:https://www.cnblogs.com/linxmouse/p/7821227.html
Copyright © 2011-2022 走看看