Skip to main content

NewSingleton

Important Attention Reminder

Coding Style wiki​


NewSingleton<T> is the plain C# class singleton base class of SingletonSystem (non-MonoBehaviour). It uses double-checked locking with lazy creation (new T()) to ensure the instance is created only once under multi-threading, suitable for data or logic manager classes that do not need to live on a GameObject.

NamespaceOxGKit.SingletonSystem
Typepublic class NewSingleton<T> where T : class, new()
SourceNewSingleton.cs
using OxGKit.SingletonSystem;

Attention The generic constraint is where T : class, new() — type T must have a public parameterless constructor.

Reminder For manager classes that need the Unity lifecycle and scene objects, use MonoSingleton instead.

Quick Start​

using OxGKit.SingletonSystem;

// Option 1: use by inheritance
public class ScoreManager : NewSingleton<ScoreManager>
{
public int score = 0;

public static void AddScore()
{
GetInstance().score++;
}
}

// Get the instance (lazy new T() creation)
var scoreManager = ScoreManager.GetInstance();
ScoreManager.AddScore();
// Option 2: without inheritance, use directly as a generic holder
public class ScoreService
{
public int score = 0;
}

NewSingleton<ScoreService>.GetInstance().score++;

Methods Overview​

MethodDescription
GetInstanceGets the singleton instance (lazy creation).
InitInstanceInitializes the singleton instance (same as calling GetInstance).
CheckInstanceExistsChecks if an instance exists.
DestroyInstanceDestroys the singleton instance (only clears the static reference).

GetInstance​

public static T GetInstance()

Gets the singleton instance; if no instance exists yet, double-checked locking ensures it is created only once with new T() under race conditions.

var scoreManager = ScoreManager.GetInstance();

InitInstance​

public static void InitInstance()

Initializes the singleton instance (same as calling GetInstance); suitable for explicitly controlling the creation order during boot (warm-up).

ScoreManager.InitInstance();

CheckInstanceExists​

public static bool CheckInstanceExists()

Checks if an instance exists (does not trigger creation).

if (ScoreManager.CheckInstanceExists())
ScoreManager.AddScore();

DestroyInstance​

public static void DestroyInstance()

Destroys the singleton instance (only clears the static reference); if the old instance is still referenced elsewhere, that object is not released by this call — it is not a disposal mechanism.

ScoreManager.DestroyInstance();

Attention After clearing, the next GetInstance call creates a brand-new instance — the old instance's state is not preserved.