mais ca n'apporte pas vraiment quelque chose en plus (ecrire les quatres lignes du DP en moins ?), surtout pour les limitations
Encore que l'on peut écrire une petite classe de base, si l'on n'a pas envie de les réécrire à chaque fois...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
    /// <summary>
    /// Classe de base pour un singleton avec constructeur par défaut.
        private ConcreteSingleton() { }
    /// </summary>
    /// <typeparam name="T">Type du singleton hérité</typeparam>
    public abstract class Singleton<T> 
        where T : Singleton<T>
    {
        protected static readonly object mylock = new object();
        protected static T instance;
 
        protected Singleton() { }
 
        public static T GetInstance()
        {
            lock ((mylock))
            {
                if (instance == null)
                    instance = (T)Activator.CreateInstance(typeof(T), true);
                return instance;
            }
        }
    }
    public class ConcreteSingleton : Singleton<ConcreteSingleton>
    {
        private ConcreteSingleton() { }
    }
Bon ça utilise la réflexion pour instancier T. Je vois pas d'autre solution pour instancier depuis l'extérieur une classe ayant un constructeur par défaut privé. Mais au niveau performance, ça ne devrait pas être trop grave parce que le singleton n'est instancié qu'une fois...