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 :

Stratégie de programmation Visual C#


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 70
    Points : 53
    Points
    53
    Par défaut Stratégie de programmation Visual C#
    Bonjour,

    Je suis débutant en programmation, je ne suis pas aussi un professionnel, je veux savoir la stratégie (les lois les bases) de programmation en C#

    j'explique encore, alors j'ai développé quelque application en utilisant VB.NET, en VB.NET je ne suis pas sensé de connaitre beaucoup des astuces de programmation pour concevoir une application par contre j'ai commencer à utilise le C# et je me bloque plusieurs fois face à des problèmes qui ne se pose pas en VB.NET

    Ce que j'ai compris donc est que le langage C# est beaucoup plus stricte que le VB.NET

    Voila un petit exemple pour mieux comprendre à quoi je parle :

    j'ai une formulaire "ParentForm" et je veux récupérer sa largeur : "ParentForm.ClientRectangle.Width" :

    En VB.NET je m'en fou de l'emplacement et/ou du timing d'appel de cette variable et elle sera mise à jour à chaque appel
    En C# je déclare une instance de ma formulaire dans une classe publique : "public static ParentForm Acceuille = new ParentForm();" et je me suis obligé de déclarer une variable publique "LargeurParentForm" puis dans l’événement Resize de ma formulaire je met : "LargeurParenForm = this.ClientRectangle.Width"
    Quelqu'un peut m'expliquer comment C# réfléchit ? et est-ce-que je dois par exemple bien maîtriser les événements pour dépasser c'est problèmes là ? et/ou d'autre choses ?

    Merci d'avance

    Cordialement

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    Normalement il n'y a aucunes differences entre C# et vbnet homris la syntaxe et deux trois specificites.

    Du coup je dois dire que je ne comprends pas vraiment le probleme.

    Tu peux nous dire ou fais-tu ton appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ParentForm.ClientRectangle.Width
    Et quel est le lien entre la classe apellante et ParentForm ?

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 70
    Points : 53
    Points
    53
    Par défaut
    Merci mermich pour la réponse

    Je t'explique mieux par un autre exemple type qui montre la différence entre VB.NET et C#, soit l'exemple suivant "modifier un contrôle d'une Formulaire appelante depuis une Formulaire appelée":

    une formulaire "Form1" contient une DataGridView "DGVF1" appelle une deuxième formulaire "Form2"
    "Form2" contient un TextBox "TBF2" et un bouton "Afficher s'il Existe"
    le bouton "Afficher s'il Existe" teste l’existence de la valeur tapée sur le TextBox "TBF2", si la valeur existe alors la ligne correspondante dans le DataGridView "DGVF1" sera sélectionnée en bleu

    Cet exemple est se réalise avec VB.NET d'une manière très simple mais par contre en C# (ce que j'ai compris à travers des recherches) il doit être réaliser à travers des événements un peu compliqué qu'avec VB.NET !

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Ce que tu avances n'est clair que pour toi....
    Ensuite tu reduis la programmation en vb.net et c# à des astuces ....
    Si tu veux apprendre valablement le VB.net comme le c# ,il faut refaire les tutos du forum au MINIMUM...et bien connaitre la programmation POO....
    Ensuite pour que les gens du forums repondent à ta question ,il faut poster le code vb.net fonctionne et le code c# qui pose probleme en utilisant la balise code(diese)...
    Sinon on pourra "discutailler" des centaines de page comme ca sans resultat....

    Et mermich sera bien embarasse....

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    ArtherKing > Ce que tu cites, ce sont des bidouilles de VB6 qui ont été portées dans VB.NET histoire que les devs VB soient pas complètement perdus.

    VB6 est abandonné.
    Il y a de bonnes raisons pour que ces "astuces" ne fonctionnent pas avec d'autres langages (celle-ci en particulier, je me suis aussi posé la question à mes débuts en C#) qui sont très bien expliquées dans la MSDN.

    Bref, sorti de ces "astuces", C# et VB.NET (mais aussi d'autres langages, il y a eu J#, PHP.NET, COBOL.NET, pour ne citer qu'eux) sont tous équivalents, pour la simple et bonne raison que le moteur qui les fait tourner ensuite, c'est le même.

    Et il vaut mieux partir de C#, qui est "LE" langage .NET que pousse Microsoft, pour ensuite le comparer avec VB.NET et les autres, plutôt que l'inverse.
    => Quand tu regardes le Paris-Dakar, les temps sont par rapport au premier, pas par rapport au dernier.
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Points : 336
    Points
    336
    Par défaut
    Citation Envoyé par ArtherKing Voir le message
    j'ai une formulaire "ParentForm" et je veux récupérer sa largeur : "ParentForm.ClientRectangle.Width" :
    Attention, le lien entre deux forms n'est pas de l'héritage à ce niveau là : la page appelée ne connait rien de la page appelante !

    Tu peux faire hériter tes forms d'une classe BaseForm avec une propriété de type Form qui récupère la form appelante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    using System.Windows.Forms;
     
    public class BaseForm : Form
    {
           public Form Parent { get; set; }
     
           public BaseForm(Form parent)
           {
                  this.Parent = parent;
           }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class ParentForm : BaseForm
    {
           [...]
     
           public OnClick() // méthode d'exemple :)
           {
                  [...]
                  ChildForm formAppelee = new ChildForm(this);
                  formAppelee.Show();
           }
    }
    Et dans ta form appelée, tu pourras utiliser Parent.UnControleDeParentForm.
    "Hope for the best, but prepare for the worst."

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    Il n'y a que moi que ça choque qu'il est déclaré sa parentform en variable statique ?

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Une variable statique ? Où ça ?

    Une variable statique, ça n'a rien à voir avec ça, puisqu'il s'agit d'une variable sur une classe qu'on n'a pas besoin d'instancier (par exemple pour un singleton).

    Ici, chaque Form doit avoir une référence à sa Form appelante.
    Je ne vois pas où est le problème philosophique... Tu connais le nom de tes gamins, et tes gamins te connaissent, non ?

    Donc si tu veux qu'une Form puisse discuter avec une autre, elle doit la connaître. C'est au contraire la base de la sécurité dans un programme : ça évite d'accéder à tout et n'importe quoi sans savoir d'où ça vient. Et d'avoir la fenêtre lambda qui plante quand on ferme la fenêtre gamma sans avoir la moindre idéede pourquoi.

    Ce que fait VB.NET (je décris un principe, pas le fonctionnement réel, qui diffère peut-être) c'est qu'il déclare en variable globale chaque instance de Form.
    Perso, ça me choque car :
    - les variables globales c'est le mal
    - ça encombre inutilement la mémoire et le processeur
    - pour le développeur, finalement ça n'apporte franchement rien
    On ne jouit bien que de ce qu’on partage.

  9. #9
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Ce que fait VB.NET (je décris un principe, pas le fonctionnement réel, qui diffère peut-être) c'est qu'il déclare en variable globale chaque instance de Form.
    Perso, ça me choque car :
    - les variables globales c'est le mal
    - ça encombre inutilement la mémoire et le processeur
    - pour le développeur, finalement ça n'apporte franchement rien

    oui c'est bien pire que ca !
    cette variable générée à la compilation semble beaucoup plus aléatoire, quand on a qu'une instance on s'attendrait à la retrouver, et pourtant des fois ca fait un new (donc une nouvelle instance, ce qui peut causer des problèmes !)
    et quand on veut utiliser plusieurs instances d'une classe form, ca en met une à jour, mais pas toujours la dernière instanciée semble t il


    par contre les variables globales, je ne vois pas en quoi c'est le mal, si tu as besoin d'un truc partout autant qu'il soit accessible de partout
    concernant l'encombrement de la mémoire et du processeur, je me demande bien pourquoi l'utilisation du mot encombrement pour un truc dérisoire
    et pour le développeur ca apporte facilité et bug


    enfin bref si je croise celui chez ms qui a eut l'idée de mettre ca sur vb.net ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    C'est pas tant la création de la référence et sa taille qui peuvent bouffer des ressources, mais la gestion.

    Sinon, les variables globales c'est le mal :

    Exemple de script VB :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    dim i = 1
     
    sub test1()
       dim i = 3
    end sub
     
    sub test2()
       msgbox i
       test1
       msgbox i
    end sub
     
    call test2()

    Enjoy !

    Ou comment se retrouver avec des variables de type valeur qui se comportement comme si c'était des types référence...
    On ne jouit bien que de ce qu’on partage.

  11. #11
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    En C# je déclare une instance de ma formulaire dans une classe publique : "public static ParentForm Acceuille = new ParentForm();"
    Je parlais de ça il a déclaré sa parentform en tant que static, ce qui est une très mauvaise idée je pense.

  12. #12
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Ce que fait VB.NET (je décris un principe, pas le fonctionnement réel, qui diffère peut-être) c'est qu'il déclare en variable globale chaque instance de Form.
    Perso, ça me choque car :
    - les variables globales c'est le mal
    - ça encombre inutilement la mémoire et le processeur
    - pour le développeur, finalement ça n'apporte franchement rien
    C'est pas vraiment global ; la possibilité de se référer à une instance par défaut ayant le même nom que la classe (par défaut, ou le chemin complet avec namespace en cas de collision de noms) n'est qu'un raccourci syntaxe vers My.Forms.NomForm qui lui même renvoie à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OpenForms avec ApplicationBase une version spécialisée de la classe Application (qui possède aussi OpenForms).

    Ça n'encombre absolument pas la mémoire, le processeur ou quoi que ce soit d'autre ; car elles ne sont pas crées d’emblée ; un simple AutreForm Is Nothing 'ou My.Forms.AutreForm Is Nothing suffira à confirmer que ce n'est créer que lorsque c'est nécessaire (c'est à dire la première fois qu'on utilisera le Form en question dans le code [sur le même principe que l'initialisation des champs static/Shared d'une classe]). Là où on est d'accord c'est que si on créé à la main Dim f As New AutreForm ce ne sera pas la même instance que celle contenue dans My.Forms (et donc suggèrerait de ne pas les créer à la main mais ça ce n'est plus le même sujet) ; heureusement on peut aussi assigner Nothing à ces instances quand on veut (ce qui les ferme proprement au passage en appelant Close dessus)

    Sinon ça n'apporte en effet pas grand chose pour le développeur actuel ; par contre pour le développeur des débuts de VB.Net (ou le pauvre malheureux qui aurait à migrer une application VB6 demain ) ça lui sera utile et je dirais ne devrait être utile qu'à lui ; c'est pour cette raison que l'on peut aussi le désactiver (suffit juste de changer une constante de compilation)

    Après on pourrait débattre du pourquoi "ils" ont gardé ça ou pourquoi "ils" ont pas mis désactivé par défaut etc. mais c'est le problème de tout langage avec une Histoire ; alors c'est sûr C# n'a pas ce problème il a été conçu en piochant les idées chez les voisins (C++, Java au moins) et sans avoir de "lignage" à assurer du coup ça simplifie beaucoup de choses. De l'autre côté VB.Net paie les difformités de son ancêtre ah la famille on la choisit pas

    Citation Envoyé par StringBuilder Voir le message
    C'est pas tant la création de la référence et sa taille qui peuvent bouffer des ressources, mais la gestion.

    Sinon, les variables globales c'est le mal :

    Exemple de script VB :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    dim i = 1
     
    sub test1()
       dim i = 3
    end sub
     
    sub test2()
       msgbox i
       test1
       msgbox i
    end sub
     
    call test2()

    Enjoy !

    Ou comment se retrouver avec des variables de type valeur qui se comportement comme si c'était des types référence...
    Là va falloir m'expliquer où est le problème à part que le code ne compile pas en VB.Net parce que le i "global" (donc champ de classe) n'est pas typé explicitement (mais mettons que ce soit un oubli) et qu'il manque les parenthèses d'appel au niveau du MsgBox (ou alors tu crois que VBA == VB.Net et là ça explique beaucoup de choses ) (je zappe le warning sur le i du test1 inutilisé ) sinon le code affiche 2 fois "1" ce qui est le comportement normal et attendu ; et ce même code mis en C# fonctionne exactement de la même manière.
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    C'est pas tant la création de la référence et sa taille qui peuvent bouffer des ressources, mais la gestion.
    noyage de poisson ?

    Citation Envoyé par StringBuilder Voir le message
    Sinon, les variables globales c'est le mal :

    Exemple de script VB :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    dim i = 1
     
    sub test1()
       dim i = 3
    end sub
     
    sub test2()
       msgbox i
       test1
       msgbox i
    end sub
     
    call test2()

    Enjoy !

    Ou comment se retrouver avec des variables de type valeur qui se comportement comme si c'était des types référence...

    chez moi ca fait 1 et 1
    déjà il faut les bonnes options de compilation (option strict on obligatoire à mon gout)
    de 2 il faut des conventions de nommage
    de 3 je ne vois pas de rapport entre ce code et une variable globale, enfin je pensais plus à une static property quelque part ...
    après je pourrais te parler de la sensibilité à la casse de c# qui laisse écrire 2 variables avec une majuscule de différence, là je trouve ca plus critiquable


    Citation Envoyé par youtpout978 Voir le message
    Je parlais de ça il a déclaré sa parentform en tant que static, ce qui est une très mauvaise idée je pense.
    s'il n'en veut qu'un ca ressemble presque à un singleton ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    pourquoi "ils" ont pas mis désactivé par défaut etc.
    ca se désactive ??
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    ca se désactive ??
    bah oui
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    mouais ... je suis allergique aux choses compliquées pour rien ... une case à cocher j'aurais pris ....
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    je vois pas trop ce qu'il y a de compliqué à rajouter _MYTYPE="Empty" dans les flags de compilation (surtout que c'est accessible dans les propriétés du projet)
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  18. #18
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    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 150
    Points : 25 066
    Points
    25 066
    Par défaut
    pas compliqué à faire certes
    mais ce n'est pas parlant, on est plusieurs sur les projets certes personne n'ira voir si quelqu'un à écrit quelque chose ici, mais bon c'est pour le principe
    j'ai passé l'age (plutot l'année) de taper des lignes de commandes parce qu'un éditeur de logiciel a été fainéant sur l'interface
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  19. #19
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Là va falloir m'expliquer où est le problème à part que le code ne compile pas en VB.Net parce que le i "global" (donc champ de classe) n'est pas typé explicitement (mais mettons que ce soit un oubli) et qu'il manque les parenthèses d'appel au niveau du MsgBox (ou alors tu crois que VBA == VB.Net et là ça explique beaucoup de choses ) (je zappe le warning sur le i du test1 inutilisé ) sinon le code affiche 2 fois "1" ce qui est le comportement normal et attendu ; et ce même code mis en C# fonctionne exactement de la même manière.
    Il s'agit d'un VBScript, donc pas VB.NET, ni VB6 ni VBA, mais VBS.

    Donc pas de static, parenthèses et types, et déclarations optionnelles.

    En fait, le code qui marche, et produit un comportement impossible à debugger, c'est celui-là :
    Code vbscript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    i = 1
     
    sub test1()
       i = 3
    end sub
     
    sub test2()
       msgbox i
       test1
       msgbox i
    end sub
     
    call test2()

    Le fait qu'on puisse, à l'intérieur d'une procédure, modifier une variable déclarée dans un autre scope est une source de bugs impossible à démerder.

    En effet, avec un "dim" dans test1, ça pose plus de problème. Mais sans dim, au lieu de planter, ça fait de ma merde.
    On ne jouit bien que de ce qu’on partage.

  20. #20
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Étant donné que VBScript a été créé par Microsoft pour être leur version de javascript ; je ne suis pas surpris par ce comportement (qui est le même que dans javascript) ; où une valeur assignée à une variable non-déclarée (via var) appartient au scope global (même si ça se déroule dans une fonction) du coup on a :
    Code javascript : 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
    i = 1; //var i = 1; // ici ça ne changerait rien ; en dehors de fonction c'est le scope global
     
    function test1 () {
        i = 3; // appartient au scope global ; donc référence le i global
        //var i = 3; // appartient au scope local ; donc masque le i global
    }
     
    function test2 () {
        console.log (i);
        test1 ();
        console.log (i);
    }
     
    test2 ();
    // affichera 1 puis 3 sans var dans test1
    // affichera 1 puis 1 avec var dans test1

    Par contre faudra m'expliquer ce qu'un exemple de VBScript vient faire dans le sujet ; c'est pas parce que ça a VB dans le nom et que les mots clefs utilisés sont les mêmes (sans doute justement parce qu'il y a VB dans le nom) qu'il faut tout mettre ensemble et dire que c'est la même chose
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

Discussions similaires

  1. Besoin d'explication sur la programmation Visual
    Par Djohn dans le forum Windows
    Réponses: 3
    Dernier message: 02/03/2008, 18h34
  2. Réponses: 0
    Dernier message: 21/08/2007, 12h43
  3. Cherche aide en programmation Visual Basic 6.0!
    Par Fernando2 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 03/01/2007, 09h41
  4. DLL Visual C++ appelée dans un programme Visual Basic
    Par marseillais57 dans le forum MFC
    Réponses: 7
    Dernier message: 21/07/2005, 15h57
  5. Convertir un programme Visual c++ vers C++ builder
    Par Skarlix dans le forum C++Builder
    Réponses: 11
    Dernier message: 16/10/2004, 23h51

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