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 :

référence d'objet et classe


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    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 : 50
    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
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    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 chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    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