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 :

[C#3] - Utilité du mot clé var ?


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 97
    Par défaut [C#3] - Utilité du mot clé var ?
    Bonjour à tous,
    j'ai lu qu'un des nouveautés de C#3 est qu'il permettait l'inférence des types locaux.
    Je ne vois aps trop la différence entre var et object.

    Le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var test1 = 10;
    Object test2 = 10;
    Console.WriteLine("Type var : " + test1.GetType().ToString());
    Console.WriteLine("Type Object : " + test2.GetType().ToString());
    retourne :
    Type var : System.Int32
    Type Object : System.Int32

    Dans les deux cas, le compilateur effectue une inférence de type.

    Qui peut éclairer ma lanterne?

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    A vrai dire les deux syntaxe n'ont pas grand chose à voir.
    Si tu déclare une variable de type object et tu mets un int dedans, tu porras toujours mettre dedans par la suite un string ou un concombre.

    Si tu déclare var s = "abc"; s est effectivement de type string et ne pourra pas être utilisé pour un autre type.

    Bon, le seul interêt est bien sur pour des nom de classe très long.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisAHugeNameClassWichIsHereOnlyToFoolUpDeveloppers a = new ThisAHugeNameClassWichIsHereOnlyToFoolUpDeveloppers ():
    sera avantageusement remplacé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var a = new ThisAHugeNameClassWichIsHereOnlyToFoolUpDeveloppers ();
    Le code IL généré sera rigoureusement identique (contrairement au C# 2.0 qui est différent du 1.0, le 3.0 est un simple preprocessing qui est ensuite compilé vers un IL 2.0).

    De toute maniére, ce var n'est pas un point très intéressant.

  3. #3
    Membre chevronné Avatar de npuzin
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2007
    Messages : 265
    Par défaut
    oui c'est completement différent var et object.

    object : l'objet n'est pas typé
    var : l'objet est typé de manière implicite (prend le type retourné par le constructeur ou la factory)

    Je crois que ce mot clé var a été ajouté parce que LINQ en avait besoin mais en dehors de ca, il n'apporte rien d'extraordinaire. Ou alors parfois pour ne pas peaumer l'intellisense a la sortie de certains algo... mais rien de transcendant je pense.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Il est aussi nécessaire pour les variables de type "anonyme".(créés à la volée)

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    en pratique (enfin pour le peu que j'ai pratiqué C# 3.0 atm), var ne sert reellement que sur les types anonymes. Vu que ces types sont créés à la compilation, tu ne peux pas les manipuler avant, c'est la que var sert : VS sait qu'il va y avoir, dans le futur, un type lambda qui aurait ces specifités, et de fait il te permet de le manipuler (meme si, concretement, il n'existe pas encore, sans ca, tu te ferais lourdement insulté à la compilation).

    Pour le reste, AMHA, je trouve que c'est une mauvaise chose de l'utiliser, on ne sait pas reellement ce qu'on manipule et caypasbien ! =)

    edit : coiffé au poteau !

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Il est aussi nécessaire pour les variables de type "anonyme".(créés à la volée)
    Et les requêtes LINQ qui renvoit des IEnumerable<CaDependQuoi>

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Et les requêtes LINQ qui renvoit des IEnumerable<CaDependQuoi>
    Ce qui constitue en soi un type anonyme.

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Ce qui constitue en soi un type anonyme.

    Oui, mais pas toujours

    string[] s = {"A", "B", "C", "D"}

    var results = from value in s
    select value;

    C'est équivalent à:

    IEnumerable<string> results = from value in s
    select value;

    L'intérêt du var ici ? Juste gagner quelques caractères que l'on ne saisit pas au clavier

Discussions similaires

  1. Utilité du mot clé params
    Par metalsephiroth dans le forum C#
    Réponses: 30
    Dernier message: 14/05/2011, 16h40
  2. [POO] Mot clé "var"
    Par Jcpan dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2010, 17h37
  3. Réponses: 1
    Dernier message: 03/06/2008, 10h31
  4. Utilité du mot-clé "final" ?
    Par vdumont dans le forum C
    Réponses: 12
    Dernier message: 07/09/2006, 18h02
  5. Réponses: 1
    Dernier message: 11/03/2006, 09h55

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