Цитата:
Сообщение от ZergMaster
пожалуй! Хотя кем жеж это надо быть, чтобы изнутри этого класса пытаться создавать множество инстансов)) Эдак себя бить себя по рукам постоянно надо. )
А извне то все равно больше одного не создашь.
|
Да почему изнутри то? Я же написал как можно создать сколько угодно таких экземлпяров. И сделал это извне. Сначала вызывается MySinglton.instance; Этот вызов ставит флаг isConstructring в true, а дальше создавай как обычные экземпляры его сколько угодно, он уже не синглтон
Туплю. Я не обратил внимание, что там флаг снова ставится в false сразу же после создания.
Да, способ хороший.
п.с. Малость офтоп, но мне нравится реализация синглтона в C# в Unity

Код AS3:
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T _instance;
private static object _lockObject = new object();
public static T Instance {
get {
if (applicationIsQuitting) {
return null;
}
lock(_lockObject)
{
if (_instance == null) {
_instance = (T) FindObjectOfType(typeof(T));
if ( FindObjectsOfType(typeof(T)).Length > 1 ) {
return _instance;
}
if (_instance == null) {
GameObject singleton = new GameObject();
_instance = singleton.AddComponent<T>();
singleton.name = "(singleton) "+ typeof(T).ToString();
DontDestroyOnLoad(singleton);
}
}
return _instance;
}
}
}
private static bool applicationIsQuitting = false;
public void OnDestroy () {
applicationIsQuitting = true;
}
}
А дальше по этому шаблону создаем сколько угодно разных синглтонов всего лишь создав такой класс

Код AS3:
using UnityEngine;
public class SomeSinglton: Singleton<SoundManager> {
}
И можно уже обращаться к нему

Код AS3:
SomeSinglton.Instance;
Очень удобная штука, и мне ее катастрофически нехватает в as3 теперь)