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

Dotnet Discussion :

C# s'enrichit d'un safe navigator operator


Sujet :

Dotnet

  1. #1
    Expert éminent sénior

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2011
    Messages : 283
    Points : 18 071
    Points
    18 071
    Par défaut C# s'enrichit d'un safe navigator operator
    C# s'enrichit d'un safe navigator operator
    A l'image de Groovy, l'opérateur «?.» fait son entrée

    C#, l'un des nombreux apports de Microsoft au développement informatique, figure actuellement parmi les langages les plus populaires selon l'index TIOBE, nul doute que son succès est dû au succès conjoint des systèmes d'exploitation Microsoft et de la plate-forme .Net, toutefois il demeure possible que son succès soit relatif à son équipe de développement qui reste à l'écoute de sa communauté et met à sa disposition un système de retour d'expérience (FeedBack) tel que www.uservoice.com.

    C'est ainsi donc qu'il a été décidé d'introduire le nouvel opérateur «?.» au langage C#, après que cette suggestion ait perçu plus de 4.313 votes favorables. Appelé aussi en anglais Safe Navigation Operator, l'opérateur «?.» permet de vérifier si la référence à un membre d'une classe est égale à Null au lieu de générer une exception de type NullReferenceException, économisant par la même occasion plusieurs lignes de code au programmeur.

    La force de l'opérateur prend tout son sens, lorsqu'il s'agit d'une référence à un membre d'une classe, qui est membre d'une autre classe et ainsi de suite, dans ce genre de situation il s’avère plus difficile de détecter l'origine de l'exception, un exemple vaut mieux qu'un long discours, considérant ce qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var g1 = parent.child.child.child;
    Si un des child contient la valeur Null, une exception sera levée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var g1 = [parent].[child].[null].child;
    L'utilisation du nouvel opérateur permet d'assigner la valeur Null à la variable, dans le cas où une des références vaut Null :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var g1 = parent?.child?.child?.child;
    if (g1 != null) // TODO
    Au lieu d'un long code équivalent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var item = this.Parent;
    item = (item == null) ? null : item.child;
    item = (item == null) ? null : item.child;
    var g1 = (parent == null) ? null : item.child;
    if (g1 != null) // TODO
    Enfin Mads Torgersen, le manager du projet C# a révélé que même si cet opérateur a reçu les faveurs de la communauté, son introduction était sur les rails depuis plusieurs mois, vu son utilité, sa facilité d'utilisation. Reste à savoir donc la date de sortie de la prochaine version du langage incluant cet opérateur.

    Source : Annonce sur MSDN

    Et vous ?
    Qu’en pensez-vous ?
    Pensez-vous que cet opérateur sera introduit prochainement dans d'autres langages ?

  2. #2
    Membre actif
    Profil pro
    Chef de projet
    Inscrit en
    Octobre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 55
    Points : 222
    Points
    222
    Par défaut
    Pour moi c'est une abérration, je m'explique :

    Si l'on écrit
    var g1 = parent?.child1?.child2?.child3;

    et qu'on imagine fonctionnellement que la valeur [null] est une valeur possible de child3 mais une valeur qui ne devrait pas arriver sur les parent/child1/child2,
    ce type d'affectation masque complétement le problème.

    var g1 = parent?.child1?.child2?.child3;
    if (g1 != null)
    ...

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 95
    Points : 264
    Points
    264
    Par défaut
    @Derf59 :

    Dans ce cas là l'opérateur n'a pas de raison d'être, vu qu'on ne fait pas child3.child...
    Mais si en revanche la valeur null est possible en child2 est pas en child1, rien n'empêche de l'écrire sous la forme :
    var g1 = parent.child1.child2?.child3;

    Non ? A moins que j'ai mal compris ce point là.

    De mon point de vue c'est un opérateur très pratique, mais qu'il faudra utiliser avec parcimonie.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Derf59 Voir le message
    et qu'on imagine fonctionnellement que la valeur [null] est une valeur possible de child3 mais une valeur qui ne devrait pas arriver sur les parent/child1/child2,
    ce type d'affectation masque complétement le problème.
    Je ne vois pas où est le problème. Si tu as besoin de savoir si c'est child3 en particulier qui est null, tu peux toujours le tester explicitement, mais il y a énormément de cas où on s'en fout, et où on veut juste la valeur de parent.child1.child2.child3 si elle est disponible, ou null à défaut.

    Évidemment ça ne couvre pas la totalité des cas d'utilisation, mais il y a plein de scénarios où ça va rendre le code plus concis et plus lisible. Perso je suis complètement en faveur de cette fonctionnalité.

  5. #5
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Je trouve l'idée très intéressante.

    Par contre je ne comprend pas cette remarque
    Citation Envoyé par Beowulf59 Voir le message
    De mon point de vue c'est un opérateur très pratique, mais qu'il faudra utiliser avec parcimonie.
    Soit l'opérateur est adapté au besoin et je ne vois pas pourquoi on ne l'utiliserais pas, soit il n'est pas adapté et la question de son utilisation ne se pose pas. Je ne comprend pas en quoi il faudrait être "parcimonieux".
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  6. #6
    Membre actif
    Profil pro
    Chef de projet
    Inscrit en
    Octobre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 55
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je ne vois pas où est le problème. Si tu as besoin de savoir si c'est child3 en particulier qui est null, tu peux toujours le tester explicitement, mais il y a énormément de cas où on s'en fout, et où on veut juste la valeur de parent.child1.child2.child3 si elle est disponible, ou null à défaut.

    Évidemment ça ne couvre pas la totalité des cas d'utilisation, mais il y a plein de scénarios où ça va rendre le code plus concis et plus lisible. Perso je suis complètement en faveur de cette fonctionnalité.
    Je pense que vous n'avez pas compris ce que je voulais signaler.

    Si on écrit
    var g1 = parent?.child1?.child2?.child3;
    if (g1 != null)

    et qu'on obtient une valeur null dans g1, on ne sait pas dire d'où elle provient (parent ? child1 ? child2 ? child3 ?) et que si on considère que dans les spécifications fonctionnelles ni parent/child1/child2 ne devraient retourner une valeur "null", on est là face à un "problème qui est complétement masqué".

  7. #7
    Membre régulier
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Décembre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 40
    Points : 83
    Points
    83
    Par défaut
    C'est un opérateur intéressant mais à double tranchant.
    Ça évite d'avoir plusieurs tests à écrire par des if, ce qui alourdi la lecture du code, donc ça reste pour des besoins précis, il y aurait peu de cas d'utilisation.

    Par contre avec un tel opérateur on serait tenté de l'utiliser partout alors que ça cacherait des erreurs, ou provoquerait des ralentissements.

    Pour moi c'est un opérateur pour un développeur averti qui connait très bien le language et les enjeux du code.

  8. #8
    Membre chevronné
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 136
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    3
    Par défaut
    Je trouve ça assez pratique... Même sans partir sur 3 ou 4 niveaux, si déjà je peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonObjetNull?.MaPropriété
    C'est carrément pratique ! fini les "if" classiques ou "en ligne".
    Pour la lecture du code c'est bien plus clair.

    A chacun de l'utiliser raisonnablement. Il y a déjà bien d'autres façons de produire du code pourri.

    Si les équipes C# ne doivent plus rien proposer au risque que le programmeur ne soit pas raisonnable, plus aucune évolution n'est alors possible sur le langage.
    .o0o__St@iLeR__oOo.

    Lead Developer

    ASP.NET MVC - MCP/MCSD ASP.NET
    PHP Zend Framework / PhalconPHP
    Cordova/Xamarin IOS/Android
    Kendo UI - ExtJS - JQwidgets
    SQL Server / MySQL

  9. #9
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 95
    Points : 264
    Points
    264
    Par défaut
    Citation Envoyé par DelphiManiac Voir le message
    Je trouve l'idée très intéressante.

    Par contre je ne comprend pas cette remarque

    Soit l'opérateur est adapté au besoin et je ne vois pas pourquoi on ne l'utiliserais pas, soit il n'est pas adapté et la question de son utilisation ne se pose pas. Je ne comprend pas en quoi il faudrait être "parcimonieux".
    pokap a résumé ma pensée juste après ton message : je pensais par exemple à certains développeurs débutants qui peuvent être tentés d'utiliser cet opérateur à tout va plutôt que de gérer proprement les erreurs (et je n'avais pas pensé aux problèmes de performances par contre).

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Derf59 Voir le message
    et qu'on obtient une valeur null dans g1, on ne sait pas dire d'où elle provient (parent ? child1 ? child2 ? child3 ?) et que si on considère que dans les spécifications fonctionnelles ni parent/child1/child2 ne devraient retourner une valeur "null", on est là face à un "problème qui est complétement masqué".
    Si parent, child1 et child2 ne doivent pas être null, alors il suffit de ne pas utiliser l'opérateur "?." pour y accéder... Le but n'est pas de remplacer l'opérateur ".", seulement de le compléter pour les cas où ça a un sens.

  11. #11
    Expert confirmé
    Avatar de TiranusKBX
    Homme Profil pro
    Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Inscrit en
    Avril 2013
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 476
    Points : 4 805
    Points
    4 805
    Billets dans le blog
    6
    Par défaut
    Comment économiser 2^x lignes de code
    Rien, je n'ai plus rien de pertinent à ajouter

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 585
    Points : 1 139
    Points
    1 139
    Par défaut
    Bonne idée peut-être, mais pas forcément dans le domaine de la réduction du nombre de lignes de tests dans le code : si le résultat est null, selon le programme ça peut être une réponse tout à fait acceptable, mais ça peut être aussi le signe d'une problème quelque part qui va demander ensuite de tester à quel niveau il s'est produit... Et dans ce cas l'écriture classique avec la série de tests sera sans doute préférable. A moins qu'il y ait un (infime) gain de performance à n'écrire qu'une seule ligne avec des ?. dans le cas où la valeur null est rarissime : la série de tests "après coup" ne sera jouée que très rarement.

    Citation Envoyé par Arsene Newman Voir le message
    [...] après que cette suggestion est perçue plus de 4.313 votes favorables. [...]
    "On a" perçu quelque chose (auxiliaire avoir), pas "on est", et donc on écrit : que cette suggestion ait perçu (ou ait reçu).
    Et l'Académie dit que après "après que", on doit utiliser l'indicatif : "après que cette suggestion a perçu".
    L'avis publié ci-dessus est mien et ne reflète pas obligatoirement celui de mon entreprise.

  13. #13
    Membre habitué Avatar de DeVaK
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 140
    Points
    140
    Par défaut
    Je trouve ça très pratique personnellement, et ce parce que je suis confronté à ce problème de if(chose.truc != null) taratata... C'est juste ultra lourd.

    Je suis actuellement sur un Intranet Asp.Net avec EF. Dans mon EF j'ai plusieurs clé étrangère qui peuvent être Null pour une personne. Donc souvent dans mon affichage je tente de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    View.nom = Chose.Personne.nom;
    Seulement pour accéder à nom, il faut que la propriété de navigation soit pas Null, sinon Exception dont je me fou totalement.

    Du coup je serais ravi de pouvoir faire un simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    View.nom = Chose?.Personne.nom;

  14. #14
    Membre averti
    Homme Profil pro
    Dev
    Inscrit en
    Novembre 2006
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Novembre 2006
    Messages : 112
    Points : 350
    Points
    350
    Par défaut
    Ca permet de gagner en lisibilité dans les cas où l'on n'a pas besoin de savoir d’où vient le "null".

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    L'intéret de cet opérateur est surtout lié à la nature de l'action correctrice qui est exécutée lorsqu'un membre vaut null et que ce n'était pas attendu.

    Cet opérateur est très bien si on se contente de faire un "return false" ou un "return" dans un bloc catch de gestionnaire d'exception...

  16. #16
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Je suis pour! bien utilisé, ça limite le code et simplifie la lecture en supprimant plein de tests.

    Je ne vois pas pourquoi ça masquerait l'origine du problème, à nouveau c'est utile quand on ne souhaite que récupérer une valeur parmis une hiérarchie, sans chercher à valider que la dîte hiérarchie est valide en terme business...

    C'est quelque chose que j'adorerais voir apparaître en Java, et que j'avais déjà utilisé/implémenté sous forme de requête à la xpath BeanUtils.get(mybean, "prop1.prop2.prop3")
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  17. #17
    Membre actif
    Profil pro
    Chef de projet
    Inscrit en
    Octobre 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 55
    Points : 222
    Points
    222
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Si parent, child1 et child2 ne doivent pas être null, alors il suffit de ne pas utiliser l'opérateur "?." pour y accéder... Le but n'est pas de remplacer l'opérateur ".", seulement de le compléter pour les cas où ça a un sens.
    On est d'accord que le "but n'est pas de remplacer le ." cependant la dérive de le faire par des personnes qui ne font pas attention à leur code (ou qui ré-utilisent du code par copier/coller) est non négligeable.

    C'est un peu comme les exceptions, si il y en a de plusieurs types, c'est pour mieux les gérer si nécessaire, pas juste pour faire (en Java) un
    try {} catch (Throwable e) {}

    Question subsidiaire :
    "si la référence à un membre d'une classe est égale à Null au lieu de générer une exception de type NullReferenceException"
    Membre en C# ca se limite à attributs d'une classe ou ca comprend aussi les méthodes de cette classe ?

    Ex : Est ce que l'opérateur fonctionne aussi avec des méthodes ?
    societe?.getSalarie(1)?.getNom() ou societe?.getSalarie(1)?.nom

  18. #18
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    1 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 030
    Points : 4 203
    Points
    4 203
    Par défaut
    Je suis globalement favorable à cet opérateur car on est souvent embêté avec des NullReferenceExceptions quand on fait x."..." où x vaut null.
    L'avantage, c'est que même si on arrive dans ce cas, le logiciel ne va rien afficher au lieu de planter, ce qui peut être une bonne chose lorsqu'on a un logiciel en production.

    Après comme l'ont dit d'autres, à utiliser avec parcimonie. Souvent les nullReferenceExceptions sont des comportements ne devant pas avoir lieu. Le débutant/feignant peut être tenté d'utiliser systématiquement cet opérateur alors que parfois on a besoin d'une erreur signalant un comportement anormal. Donc si utilisation, bien vérifier qu'une éventuelle erreur n'est pas nécessaire.

    De plus, cette instruction peut rajouter un test dans des cas où ça ne devrait jamais être null. Il en résulte donc un défaut d'optimisation.

  19. #19
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2007
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 677
    Points : 2 137
    Points
    2 137
    Par défaut
    Je suis pour à 100% ! Et pas uniquement parce que je suis confronté à la chose à l’instant même (étant dans un contexte similaire à celui de DeVaK ; un service WCF qui joue avec Entity Framework et qui peut traiter des objets dont les propriétés de navigations sont null).

    Il me tarde de voir ça arriver, car les if et autre ternaires imbriqués c’est pas franchement jojo.
    Le WIP de The last bastion, mon projet de jeu-vidéo (un TD en 3D)

    Mon portfolio / Ma page fb

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Derf59 Voir le message
    Membre en C# ca se limite à attributs d'une classe ou ca comprend aussi les méthodes de cette classe ?
    Les membres d'une classe sont les méthodes, propriétés, évènements, champs et constructeurs

    (quoi qu'en l'occurrence cet opérateur n'aurait pas beaucoup de sens pour des évènements ou constructeurs bien sûr...)

Discussions similaires

  1. Réponses: 17
    Dernier message: 13/10/2008, 10h45
  2. [C#] Bakckground Worker et operations Thread Safe
    Par xtream dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/09/2006, 01h20
  3. [JSP][Barre de navigation] Gestion du bouton precedent
    Par lando dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 09/09/2003, 16h18
  4. Bouton de navigation
    Par thierry sache dans le forum Flash
    Réponses: 2
    Dernier message: 17/12/2002, 11h43
  5. Source Safe -> VC++
    Par Emilio dans le forum MFC
    Réponses: 7
    Dernier message: 07/11/2002, 15h57

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