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

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2002
    Messages : 329
    Points : 139
    Points
    139

    Par défaut référence d'objet et classe

    Bonjour,

    Je ne comprends pas pour quelle raison, lorque j'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AllDatas donnees=new AllDatas();
    j'obtiens l'erreur 'La référence d'objet n'est pas définie à une instance d'objet' sur la ligne 55.
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    public class Calendrier
        {
            public TimeSpan temps_am_1;
            public TimeSpan temps_am_2;
            public TimeSpan temps_pm_1;
            public TimeSpan temps_pm_2;
            public DateTime jour;
     
            public Calendrier()
            {
     
            }
     
            public Calendrier(DateTime d1, DateTime d2, DateTime d3, DateTime d4)
            {
                temps_am_1 =d1.TimeOfDay;
                temps_am_2 = d2.TimeOfDay;
                temps_pm_1 = d3.TimeOfDay;
                temps_pm_2 = d4.TimeOfDay;
                jour = d1.Date;
            }
     
            public Calendrier(TimeSpan temps_am_1, TimeSpan temps_am_2, TimeSpan temps_pm_1, TimeSpan temps_pm_2, DateTime jour)
            {
                this.temps_am_1 = temps_am_1;
                this.temps_am_2 = temps_am_2;
                this.temps_pm_1 = temps_pm_1;
                this.temps_pm_2 = temps_pm_2;
                this.jour = jour;
            }
     
            public TimeSpan Ecart(TimeSpan t1, TimeSpan t2)
            {
                if(t1>t2)
                {
                    return t1.Subtract(t2);
                }
                else
                {
                    return t2.Subtract(t1);
                }
            }
        }
     
    public class AllDatas
        {
            public Calendrier[] cal;
     
            public AllDatas()
            {
                 cal= new Calendrier[366];
                for(int i=0;i<366;i++)
                {
                    cal[i].temps_am_1 = TimeSpan.Parse("00:00");
                    cal[i].temps_am_2 = TimeSpan.Parse("00:00");
                    cal[i].temps_pm_1 = TimeSpan.Parse("00:00");
                    cal[i].temps_pm_2 = TimeSpan.Parse("00:00");
     
                    cal[i].jour = new DateTime(2018,01,01);
                }  
            }
         }
    Quelqu'un a une explication?

    En vous remerciant par avance

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    avril 2007
    Messages
    13 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 13 218
    Points : 23 530
    Points
    23 530

    Par défaut

    cal est bien inutilisé mais il contient 366 null donc cal[i].temps_am_1 équivaut à null.temps_am_1 donc a plante
    Il faut initialiser cal[i] = new quelquechose avant
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2002
    Messages : 329
    Points : 139
    Points
    139

    Par défaut

    Bonjour,

    Je pensai (à tort) que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Calendrier [] cal = new Calendrier [366]
    instanciait naturellement les 366 classes calendriers...

    Merci

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    avril 2007
    Messages
    13 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 13 218
    Points : 23 530
    Points
    23 530

    Par défaut

    ca ne serait pas logique

    déjà en poo si une classe hérite de calendrier alors elle peut etre dans ce tableau, et pas forcément dans toutes les cases
    donc c# ne pourrait pas deviner quelle classe instancier

    de plus des fois on fait un tableau et on remplit les cases en obtenant des objets créés ailleurs, dans ce cas on aurait instancié des classes pour rien

    rien est implicite car ce langage permet énormément de choses et laisse cette liberté
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé
    Homme Profil pro
    x
    Inscrit en
    juin 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : x

    Informations forums :
    Inscription : juin 2007
    Messages : 483
    Points : 731
    Points
    731

    Par défaut

    En fait on pourrait dire que les éléments du tableau sont bien initialisés, à la valeur par défaut du type ; la valeur par défaut des types référence est null. Pour les types valeurs ça peut varier : 0 pour int ou long, 0.0 pour float et double, false pour boolean, etc... Une struct plus complexe est initialisée avec les valeurs par défaut de ses membres (il n'est d'ailleurs pas possible de déclarer un constructeur sans paramètre sur une struct).

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/04/2013, 21h20
  2. faire référence à un objet externe à la classe
    Par David dans le forum Langage
    Réponses: 13
    Dernier message: 23/02/2010, 21h50
  3. Réponses: 2
    Dernier message: 30/12/2006, 13h34
  4. Référence à un objet existant depuis une classe
    Par Adrenalys dans le forum ASP
    Réponses: 2
    Dernier message: 21/07/2005, 00h44
  5. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07

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