none
propriété protégé de classe parent RRS feed

  • Question

  • bonjour j'utilise une propriété de classe parent appelé "Contribuable" et puis je l'appélé dans un classe dérivée appelé "ContribuableMoral" mais au cours d'excution elle m'affiche null dans le methode de classe dérivée.

    public class contribuable
        {
           protected string MATRICULE_FISCALE;

     public contribuable(string _matricule_fiscale)

    {
            this.MATRICULE_FISCALE    = _matricule_fiscale;     //exemple de MATRICULE_FISCALE=123456789
    }

     public void insertContribuable()
            {
              string  sql = "insert into CLIENT (MATRICULE_FISCALE)values('" +this.MATRICULE_FISCALE    +"')";   //MATRICULE_FISCALE=123456789

    }


    }



     class ContribuableMoral:contribuable
       {

     public ContribuableMoral()
           {
               
           }

    public void InsertionMorale()
           {
               string sqlMorale = "insert into CLIENT_MORALE(MATRICULE_FISCALE) values('" + MATRICULE_FISCALE + "')";  //MATRICULE_FISCALE=null
    }
    }

    normalement la propriété déclaré au classe parents peut être appelé au classe dérivée?!!!!!!


    • Modifié Ammar.Dev lundi 30 novembre 2015 10:26
    lundi 30 novembre 2015 10:18

Réponses

  • Non je répète chaque objet est INDEPENDANT, donc 'contrib' a sa valeur de matricule, et 'contribMoral' a sa propre valeur.

    L'héritage objet ne signifie pas que les deux objets se connaissent, il signifie que les deux objets partagent les caractéristiques "communes" définies dans la classe 'contribuable'.

    Dans votre cas, je pense qu'il est impératif que votre classe 'ContribuableMoral' possède le même type de constructeur que 'contribuable' et qu'il appelle le constructeur du parent, ainsi vous pourrez créer un "ContribuableMoral" avec un matricule, et comme vous appellerez le constructeur parent votre propriété matricule sera initialisée :

    class ContribuableMoral:contribuable
    {
    
      public ContribuableMoral(String matricule)
        : base(matricule)
      {
      }
    
    ...
    
    } 

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse Ammar.Dev lundi 30 novembre 2015 14:58
    lundi 30 novembre 2015 14:32

Toutes les réponses

  • Bonjour,

    Vous avez bien accès à votre propriété protégée, sinon le compilateur refuserait de compiler votre code.

    Si votre propriété est null c'est que vous ne l'avez pas initialisée (ou que vous l'avez initialisée avec une valeur null).

    Je ne sais pas si il y a un rapport avec votre précédente question concernant les constructeurs de classe enfant, mais j'ai l'impression que vous n'appelez pas votre classe parent (Contribuable) avec son constructeur avec son argument matricule_fiscale (en tout cas rien dans votre classe fille ne l'indique), je suppose que vous avez un constructeur sans argument dans la classe Contribuable qui n'apparait pas dans votre exemple (car sinon votre code ne peut pas compiler), et si ce constructeur n'initialise pas votre propriété c'est normal qu'elle soit à null (valeur par défaut d'un String).

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.


    lundi 30 novembre 2015 10:57
  • non le problème que j'instancie ContribuableMoral

    contrib.insertContribuable();
    ContribuableMoral contribMoral=new ContribuableMoral();
    contribMoral.InsertionMorale();

    aprés l'instantiation de contribuable.

    contribuable contrib=new contribuable("123456789");

    je perdre le matricule_fiscale qui devient null :(

    lundi 30 novembre 2015 13:46
  • Vous parlez du "matricule_fiscale" de quel objet ? Vous nous montrez deux objets 'contrib' et 'contribMoral'.

    Chaque objet est indépendant (sauf si vous avez du static qui n'est pas affiché dans votre code d'exemple), donc normalement votre dernier 'contrib' contient un matricule ("123456789").

    En revanche pour votre 'contribMoral' il est possible que vous n'ayez pas de matricule, car vous appelez un constructeur sans argument, ce dernier doit appeler un constructeur parent sans argument (mais il n'est pas dans votre code d'exemple) donc nous ne savons pas si il attribue une valeur à votre matricule. Vu le problème que vous décrivez je suppose que ce constructeur sans argument n'affecte pas de valeur au matricule, donc il est null.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    lundi 30 novembre 2015 13:58
  • oui c'est vrai mais l'objet contribMoral est une insatanciation de classe ContribuableMoral qui est hérité de classe parent Contribuable.en plus le matricule_fiscale est vue dans le classe dérivée  ContribuableMoral.

    donc normalement quand je mis 

    contribuable contrib=new contribuable("123456789") => je peut utilisé le matricule_fiascale("123456789") dans le methode contrib.insertionContribuable() et contribMoral.insertionMoral();

    ?

    lundi 30 novembre 2015 14:14
  • Non je répète chaque objet est INDEPENDANT, donc 'contrib' a sa valeur de matricule, et 'contribMoral' a sa propre valeur.

    L'héritage objet ne signifie pas que les deux objets se connaissent, il signifie que les deux objets partagent les caractéristiques "communes" définies dans la classe 'contribuable'.

    Dans votre cas, je pense qu'il est impératif que votre classe 'ContribuableMoral' possède le même type de constructeur que 'contribuable' et qu'il appelle le constructeur du parent, ainsi vous pourrez créer un "ContribuableMoral" avec un matricule, et comme vous appellerez le constructeur parent votre propriété matricule sera initialisée :

    class ContribuableMoral:contribuable
    {
    
      public ContribuableMoral(String matricule)
        : base(matricule)
      {
      }
    
    ...
    
    } 

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse Ammar.Dev lundi 30 novembre 2015 14:58
    lundi 30 novembre 2015 14:32
  • ah ok, moi j'ai un contribuable et chaque contribuable se devise en trois type (moral,physique,forfaitaire) c'est à dire quatre table dans la base de donnée.je veut ajouter le matricule_fiscale dans le table contribuable et puis je rajoute cette matricule dans le deuxième table approprié. c'est pour-cela que je réfléchi a l'héritage mais après que tu m'explique je vois que c'est une mauvaise idée d'utilisé l'héritage. en tous cas merci pour m'explique un peut le principe d’héritage. :) 
    lundi 30 novembre 2015 14:46
  • De rien,

    N'oubliez pas de "Marquer comme réponse" les réponses qui ont répondues à la question, afin d'indiquer à la communauté que votre question a été répondue et de faciliter les recherches.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse Ammar.Dev lundi 30 novembre 2015 14:58
    • Non marqué comme réponse Ammar.Dev lundi 30 novembre 2015 14:59
    lundi 30 novembre 2015 14:54