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

ASP.NET Discussion :

Base : Classe abstraite et constructeur


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut Base : Classe abstraite et constructeur
    Bonjour à tous,

    Ceci est une question concernant les bases en C# (je viens du monde VB et je viens de me mettre au C# histoire d'etre ok sur les deux langages).

    J'ai une classe abstraite "BaseService" comme suit
    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
    abstract class BaseService
        {
            protected IBaseService _service;
     
            public BaseService(IBaseService ioc)
            {
                _service = ioc;
            }
     
    public IList<Object> GetAll(IBaseService ioc)
            {
                return _service.GetAll();
            }
     
        }
    J'ai une classe "SProducts" qui hérite de "BaseService"
    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
     
    class SProducts : BaseService
        {
            new protected IProducts _service;
     
            public SProducts(IProducts ioc)
            {
                _service = ioc;
            }
     
            public IList<Products> GetValidProducts()
            {
                return _service.GetValidProducts();
            }
        }
    Lorsque mes méthodes de base figurant dans la classe mere BaseA font appel à _service, je reçois une exception comme quoi _service est à null.
    Ce que j'ai fait pour pallier à ce problème c'est de modifier le constructeur de "SProducts" comme suit :
    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
    class SProducts : BaseService
        {
            new protected IProducts _service;
     
            public SProducts(IProducts ioc)
            {
                _service = ioc;
                base._service = ioc;
            }
     
            public IList<Products> GetValidProducts()
            {
                return _service.GetValidProducts();
            }
        }
    Je suis donc obligé de faire deux assignations au constructeur : une pour la classe fille et une pour la classe de base dont elle hérite.

    Est-ce normal ou bien ai-je raté un épisode quelque part ?
    Logiquement, le fait d'assigner une valeur à l'attribut de la classe fille devrait automatiquement "assigner" la même chose à la classe mère vu qu'on travaille sur le même attribut non ?

    Merci d'avance pour vos réponses

  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,

    C'est pas un coup à s'emméler les pinceaux? Pourquoi veux-tu l'assigner en même temps dans la classe fille et parent? Assigne seulement le parent, non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public FilleA(IToto ioc)
    	: base(ioc)
    {
     
    }
    IBaseToto et IToto sont différentes?

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

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    J'ai modifié les noms de mon premier topic pour que ce soit un peu plus explicite. Pour ce qui est du retour de la méthode GetAll de la classe BaseService, je sais que je peux jouer avec les génériques et le mot clef T mais pour l'exemple ce n'est pas nécessaire, cela ne change rien au probleme.

    SProducts hérite de BaseService
    ISProducts hérite de IBaseService (qui sont bien des interfaces en cas de doute)

    Mon problème se situe ici :
    Dans BaseService tu as une méthode GetAll() qui fait appel à _service qui fait partie de IBaseService
    Dans ISProducts tu as une méthode GetValidProducts qui appelle aussi _service mais qui fait partie de ISProducts

    Si dans le constructeur de SProducts j'initialise seulement l'attribut _service de SProducts, quand je fais appel à GetAll() il me dit que _service de BaseService est à null.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Je viens de trouver...

    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
    abstract class BaseService
        {
            protected IBaseService _service;
     
            public BaseService(IBaseService ioc)
            {
                _service = ioc;
            }
     
    public IList<Object> GetAll(IBaseService ioc)
            {
                return _service.GetAll();
            }
     
        }
    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
     
    class SProducts : BaseService
        {
            new protected IProducts _service;
     
            public SProducts(IProducts ioc) : base(ioc)
            {
                _service = ioc;
            }
     
            public IList<Products> GetValidProducts()
            {
                return _service.GetValidProducts();
            }
        }
    Merci de ton aide Immobilis

  5. #5
    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
    En faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public SProducts(IProducts ioc) : base(ioc)
    Tu ne devrais pas avoir besoin de faireLe constructeur de la classe de base le fait.

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

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Salut,

    oui effectivement, tu as raison Merci !

Discussions similaires

  1. Réponses: 15
    Dernier message: 05/07/2007, 01h29
  2. Réponses: 2
    Dernier message: 18/04/2007, 13h34
  3. Réponses: 14
    Dernier message: 17/11/2006, 19h17
  4. Classe abstraite et constructeurs
    Par koala01 dans le forum C++
    Réponses: 6
    Dernier message: 21/08/2006, 01h00
  5. pb constructeurs classes dérivant classe abstraite
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2003, 19h02

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