IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Template, Singleton et Héritage


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 163
    Par défaut Template, Singleton et Héritage
    Bonjour,

    J'ai créé une classe template:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MyClassTemplate<Type> where Type: class
    {
        public MyClassTemplate() { ... }
     
        ...
    }
    Je la définis en singleton:
    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
    public class MyClassTemplate<Type> where Type: class
    {
        protected MyClassTemplate() { }
     
        private static MyClassTemplate<Type> m_TheInstance;
     
        public static MyClassTemplate<Type> TheInstance
        {
            get
            {
                if (m_TheInstance == null)
                {
                    m_TheInstance = new MyClassTemplate<Type>();
                }
     
                return m_TheInstance;
             }
         }
    }
    Je veux utiliser cette classe par héritage afin de la spécialiser en lui rajoutant des méthodes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public  ClassTemplateString : MyClassTemplate<String>
    {
        public void Test() {}
     
        ...
    }
    Malheureusement, comme TheInstance est hérité et correspond à MyClassTemplate<Type> et non à ClassTemplateString, impossible d'accéder aux méthodes de ClassTemplateString:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Erreur !
    ClassTemplateString.TheInstance.Test();
    J'aimerai en fait éviter de recoder la partie singleton pour chaque classe fille.
    Merci d'avance pour vos remarques et suggestions,
    AL2000

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Une méthode statique n'est pas visible dans une classe instanciée il me semble. Sinon, pour les singletons, il y a ce tuto: http://webman.developpez.com/article...rns/singleton/
    Ton singleton n'est pas MultiThread safe.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Salut.

    J'ai déjà eu ce genre de problème à traiter et franchement la complexité de la solution ne vaut pas le coup.
    Il faut que tu définisses une classe avec deux arguments générique, l'un pour le type de ton singleton et l'autre pour ton type de données.

    ça donne ça de mémoire : (Attention ça pique les yeux )
    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
     
    public abstract class MyClassTemplate<Type, InstanceType>
            where Type : class
            where InstanceType : class
        {
            protected MyClassTemplate() { }
     
            private static InstanceType m_TheInstance;
     
            protected static object CreateInstance()
            {
                throw new NotImplementedException();
            }
     
            public static InstanceType TheInstance
            {
                get
                {
                    if (m_TheInstance == null)
                    {
                        m_TheInstance = (InstanceType)CreateInstance();
                    }
     
                    return m_TheInstance;
                }
            }
        }
    et à l'utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class MyStringTemplate : MyClassTemplate<string, MyStringTemplate>
        {
            protected static new object CreateInstance()
            {
                return new MyStringTemplate();
            }
        }
    Mais bon, encore une fois je pense pas que ça en vaille la peine ...

    En

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 163
    Par défaut
    Merci, je vais essayer cette solution

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. template, singleton et object factory
    Par [Hugo] dans le forum Langage
    Réponses: 13
    Dernier message: 04/05/2009, 13h53
  2. [Singleton] [Java] Singleton et héritage
    Par Didier 69 dans le forum Design Patterns
    Réponses: 4
    Dernier message: 13/01/2007, 12h18
  3. Réponses: 3
    Dernier message: 22/11/2006, 21h10
  4. Réponses: 13
    Dernier message: 25/10/2006, 16h17
  5. probléme : template multiple et héritage simple.
    Par laetmo dans le forum Langage
    Réponses: 1
    Dernier message: 03/08/2006, 02h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo