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 :

le mot clé NEW


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut le mot clé NEW
    Bonsoir à tous,

    Je me pose une question existentielle sur le mot clé NEW.
    Bien que j'ai bien compris que celui ci sert à initialiser une variable de type référence dans le "tas", je ne comprend pas pourquoi dans certains cas, on peut s'en affranchir.

    Premier exemple: Lorsque j'appelle une méthode (static ou non) qui renvoie un type objet, je peux me contenter d'écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeDeMonObjet MonObject = MaMethode(...) // Si ma méthode me renvoie bien un objet de type TypeDeMonObject étant un objet défini via une classe.
    Dans ce cas, pas besoin du new, pourtant je déclare bien un objet de type référence.

    Autre exemple (vraiment pris au hasard), lorsque j'utilise la méthode static cette fois, DriveInfo.GetDrives():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DriveInfo[] MonTableau = DriveInfo.GetDrives();
    Encore une fois pas besoin d'initialiser ma variable via un "new". Et pourtant encore une fois, je déclare un nouvel objet de type référence et tente d'y affecter des valeurs.

    Ceci sont 2 exemples parmi tant d'autres, mais je m'y perds, ca me perturbe... J'imagine qu'il y a une règle logique, mais je n'arrive pas à l'isoler.


    Quand faut-il utiliser "new" et quand peut on s'en affranchir ? Et que se passe t-il dans le tas si je n'initialise pas avec "New" ?

    Merci à vous, d'avance

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Le mot clé new sert à instancier un objet, c'est à dire à le créer. Rien à voir avec la déclaration ou l'initialisation.

    Pour reprendre l'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DriveInfo[] MonTableau = DriveInfo.GetDrives();
    C'est la méthode qui va créer le tableau et qui va donc faire le new. Après le reste c'est juste une affectation.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    merci pour ta réponse si rapide.

    Ok donc finalement si je te suis et si je pousse un peu le bouchon, physiquement j'ai donc 2 références qui pointent sur le même objet. Une que je déclare en amont (exemple, MonTableau) et une qui a été faite dans la méthode appelée ... ?

    Donc au final, dès lors que j'appelle une méthode qui renvoie un objet, je peux sous-entendre que l'objet a été créé et initialiser dans ladite méthode et donc tout le temps m'affranchir du "new" ?

    ca se tient ?

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par keryss
    Donc au final, dès lors que j'appelle une méthode qui renvoie un objet, je peux sous-entendre que l'objet a été créé et initialiser dans ladite méthode et donc tout le temps m'affranchir du "new" ?
    Dès qu'une méthode (ou une propriété) renvoie un objet, alors il a été instancié. Sauf si tu récupères une référence null bien évidemment.

    Par contre l'objet n'est pas forcément initialisé (i.e. son état n'est pas défini). Ce sont deux choses séparées.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 76
    Par défaut
    oui je vois la nuance. Si je ne me trompe pas, instancié veut dire que l'emplacement mémoire a été réservé dans le tas, mais cela ne veut pas forcément dire en effet qu'il y ai du contenu, ni même qu'il ai été initialisé.

    Par contre ca suffit à me garantir l'affranchissement du new, puisqu'il a été instancié.

    Arrête moi si j'ai pas bon

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Pas besoin du new effectivement.

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

Discussions similaires

  1. Extraction de mots clés
    Par Olive1808 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 01/02/2016, 20h49
  2. Explication sur le mot New
    Par tamtam64 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/06/2015, 09h30
  3. Question sur le mot new
    Par heeedi dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 03/08/2009, 11h20
  4. Réponses: 2
    Dernier message: 09/10/2008, 21h35
  5. [VB6] erreur de compilation:utilisation incorrecte du mot clé New
    Par fouf_01 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 17/05/2006, 16h22

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