Singleton

Implementación manual de Singleton segura para múltiples hilos sin usar Lazy<T>.

#Cuándo usarla

Cuando necesitas control fino sobre la inicialización (por ejemplo, parámetros que solo se conocen en runtime) y Lazy<T> no encaja.

#Ejemplo en C#

public sealed class Cache
{
    private static Cache? _instance;
    private static readonly object _gate = new();

    public static Cache Instance
    {
        get
        {
            if (_instance is null)
            {
                lock (_gate)
                {
                    _instance ??= new Cache();
                }
            }
            return _instance;
        }
    }

    private Cache() { /* costosa inicialización */ }
}
Cuándo NO aplicarlo

Si no necesitas inicialización condicional, prefiere Lazy<T> — es más legible y igual de seguro.

#creational #threading #lock