Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1937 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] Question de débutant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C#] Question de débutant

n°1634629
Saubin
Posté le 31-10-2007 à 13:48:10  profilanswer
 

Bonjour à tous,
Je débute en C# et j'ai un petit soucis. Je dois faire un prog de gestion de note et de personne et j'ai une classe binom qui est composé de deux objet Student. Pour l'instant je pense avoir écrit une grosse connerie j'ai mi codé le lien comme ceci:
 
private Student []TabStudent = new Student[2];
 
J'ai fait du C++ et si j'avais eu à utiliser ce langage j'aurais mi des pointeurs...Apparemment en C# il n'y pas besoin de ces pointeurs MAIS dans mon cas je ne vois pas comment lier correctement un binom et deux Student. Pour l'instant comme je l'ai écrit il n'y a pas de lien entre les deux, je re-cré deux objets Student indépendant, je voudrais que quand je modifie le student cela soit répercuté dans la classe binom...j'attends donc vos avis pour m'éclairer un peu...J'ai essayé de faire avec des pointeurs mais apparemment ce n'est pas la bonne méthode à suivre...
 
Merci d'avance

mood
Publicité
Posté le 31-10-2007 à 13:48:10  profilanswer
 

n°1634636
Taz
bisounours-codeur
Posté le 31-10-2007 à 13:56:17  profilanswer
 

Page 3 de ton manuel de C#

n°1634640
Saubin
Posté le 31-10-2007 à 14:00:25  profilanswer
 

Déjà chercher dans les manuels, j'ai pas trouvé ;)

n°1634681
MagicBuzz
Posté le 31-10-2007 à 14:41:20  profilanswer
 

déjà je pige pas de quoi tu parles.
 
tu modifies ton OBJET (instance) et tu veux que ce soit récupéré dans ta CLASSE ????????
 
ça veut rien dire.
 
sinon, histoire de comprendre un peu les notions de références en C#, exécute ce petit exemple pour comprendre les mécanismes :
(roulé à la main sous les aisselles, c'est juste pour montrer comment ça marche)

Code :
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4.  
  5. namespace TestConsole
  6. {
  7.    class Program
  8.    {
  9.        static void Main(string[] args)
  10.        {
  11.            Personne pers = new Personne("Dupont", "Michel", 27);
  12.            Console.WriteLine(pers.ToString());
  13.            UpdatePersonne(pers, "Dupond" );
  14.            Console.WriteLine(pers.ToString());
  15.            KillPersonne(pers);
  16.            Console.WriteLine(pers.ToString());
  17.            NouvellePersonne(pers, "Dupuis", "Olivier", 42);
  18.            Console.WriteLine(pers.ToString());
  19.  
  20.            Console.ReadKey(true);
  21.        }
  22.  
  23.        static void UpdatePersonne(Personne p, string nom)
  24.        {
  25.            p.Nom = nom;
  26.            Console.WriteLine(p.ToString());
  27.        }
  28.  
  29.        static void KillPersonne(Personne p)
  30.        {
  31.            p = null;
  32.            Console.WriteLine("Personne est mort" );
  33.        }
  34.  
  35.        static void NouvellePersonne(Personne p, string nom, string prenom, int age)
  36.        {
  37.            p = new Personne(nom, prenom, age);
  38.            Console.WriteLine(p.ToString());
  39.        }
  40.    }
  41.  
  42.    class Personne
  43.    {
  44.        private string _nom, _prenom;
  45.        private int _age;
  46.  
  47.        public Personne(string Nom, string Prenom, int Age)
  48.        {
  49.            _nom = Nom;
  50.            _prenom = Prenom;
  51.            _age = Age;
  52.        }
  53.  
  54.        public string Nom
  55.        {
  56.            get
  57.            {
  58.                return _nom;
  59.            }
  60.            set
  61.            {
  62.                _nom = value;
  63.            }
  64.        }
  65.  
  66.        public string Prenom
  67.        {
  68.            get
  69.            {
  70.                return _prenom;
  71.            }
  72.            set
  73.            {
  74.                _prenom = value;
  75.            }
  76.        }
  77.  
  78.        public int Age
  79.        {
  80.            get
  81.            {
  82.                return _age;
  83.            }
  84.            set
  85.            {
  86.                _age = value;
  87.            }
  88.        }
  89.  
  90.        public override string ToString()
  91.        {
  92.            return string.Format("Personne : {0} {1} est agé de {2} ans.", _prenom, _nom, _age);
  93.        }
  94.    }
  95. }

n°1634700
Taz
bisounours-codeur
Posté le 31-10-2007 à 14:58:24  profilanswer
 

mais non, il a pas lu les bases sur les valuetype, les objets, l'allocation dynamique, etc

n°1634781
MagicBuzz
Posté le 31-10-2007 à 16:02:25  profilanswer
 

Taz a écrit :

mais non, il a pas lu les bases sur les valuetype, les objets, l'allocation dynamique, etc


bah ouais, mais justement, avec l'exemple que je file, il va commencer à comprendre qu'il a besoin de lire un minimum de doc sur le sujet avant de chercher à aller plus loin ;)
 
ceci dit, je dois dire que moi j'ai mis un bout de temps à vraiment comprendre le principe du truc (surtout à savoir m'en servir et prévoir le comportement ;) spa évident -mais bon j'ai pas d'excuse, j'ai jamais acheté de bouquin :D-)

n°1634784
Taz
bisounours-codeur
Posté le 31-10-2007 à 16:03:26  profilanswer
 

MagicBuzz a écrit :


bah ouais, mais justement, avec l'exemple que je file, il va commencer à comprendre qu'il a besoin de lire un minimum de doc sur le sujet avant de chercher à aller plus loin ;)
 
ceci dit, je dois dire que moi j'ai mis un bout de temps à vraiment comprendre le principe du truc (surtout à savoir m'en servir et prévoir le comportement ;) spa évident -mais bon j'ai pas d'excuse, j'ai jamais acheté de bouquin :D-)


100 lignes d'exemple ne peuvent pas remplacer 3 lignes de définition.

n°1634788
MagicBuzz
Posté le 31-10-2007 à 16:05:41  profilanswer
 

ça dépend, moi j'arrive à apprendre que par la pratique.
 
la doc ça aide, mais pour moi, c'est qu'une fois que je sais ce que j'attends de la doc : en gros j'ai un cas précis que je ne comprends pas, et là je lis la doc pour voir pourquoi. j'arrive pas à faire l'inverse :spamafote:
 
m'enfin bon spa nouveau, je fais tout à l'envers :D
 
le meilleur exemple, c'est en ce moment : je fais une appli de consultation d'un catalogue situé dans une base.
le client est fini fignolé et tout ça.
et là je suis en train de me rendre compte que j'ai aucun outil pour allimenter/maintenir la base, chuis en train d'en coder un :pt1cable:

Message cité 1 fois
Message édité par MagicBuzz le 31-10-2007 à 16:06:55
n°1634806
Taz
bisounours-codeur
Posté le 31-10-2007 à 16:17:00  profilanswer
 

MagicBuzz a écrit :

ça dépend, moi j'arrive à apprendre que par la pratique.


foutaise. Comme disait je-sais-plus-qui (Pascal / Descartes / Kamoulox) tu peux regarder autant que tu veux une flamme sans jamais arriver à saisir ce qui se passe.

n°1634808
Saubin
Posté le 31-10-2007 à 16:18:31  profilanswer
 

Rebonjour,
Alors pour essayer d'un peu plus vous expliquez mon problème:
Le code de mon Binom:

Code :
  1. class Binom
  2.    {
  3.        private float Note;
  4.        private String Commentaire;
  5.        private Student[] TabStudent = new Student[2];
  6.  
  7.        //Set
  8.        public void SetNote(float a) { Note = a; }
  9.        public void SetCommentaire(String a) { Commentaire = a; }
  10.        public void SetTestStudent(Student S1, Student S2) { TabStudent[0] = S1; TabStudent[1] = S2; }//Ecrase les deux etudiant d'un binom
  11.        public int SetStudent(Student S)
  12.        {
  13.            for (int i = 0; i < TabStudent.Length; i++)
  14.            {
  15.                if (TabStudent[i] == null)
  16.                {
  17.                    TabStudent[i] = S;
  18.                    return 0;
  19.                }
  20.            }
  21.            return 1;
  22.        }
  23.        //Get
  24.        public float GetNote() { return Note; }
  25.        public String GetCommentaire() { return Commentaire; }
  26.        public Student GetTabStudent(int i) { return TabStudent[i]; }
  27.    }
  28. }


 
Sur cette ligne:  public void SetTestStudent(Student S1, Student S2) { TabStudent[0] = S1; TabStudent[1] = S2; }//Ecrase les deux etudiant d'un binom
 
je duplique l'étudiant et je voudrais que l'étudiant "pointe"  sur la case du tableau comme on le ferait naturellement en C++
 
Ps:Vous occupez pas des commentaires, de la doc j'en ai j'ai regardé dedans et rien ne parle de ce que je veux faire donc je demande conseil...


Message édité par Saubin le 31-10-2007 à 16:21:07
mood
Publicité
Posté le 31-10-2007 à 16:18:31  profilanswer
 

n°1634813
Taz
bisounours-codeur
Posté le 31-10-2007 à 16:21:43  profilanswer
 

(déjà les bool ça existe)
 
Et non, tu n'écrases pas des étudiants, tu modifies des références. TabStudent est un tableau de référence à des Student.

n°1634821
Saubin
Posté le 31-10-2007 à 16:31:33  profilanswer
 

D'ac sauf que si je modifie l'étudiant S1, le même étudiant contenu dans TabStudent[0] n'est pas modifié et c'est à ça que j'aimerais arrivé.
(j'ai pas utilisé de bool :??:
 
Edit: Dsl taz j'ai mal lu ta réponse sur les bools)


Message édité par Saubin le 31-10-2007 à 17:24:32
n°1634861
MagicBuzz
Posté le 31-10-2007 à 17:22:48  profilanswer
 

Plop.
 
Déjà, une petite remarque.
 
Tes méthodes Getxxx et Setxxx n'ont rien à faire sous forme de méthodes. Utilise des propriétés avec accesseurs :
 

Code :
  1. class Binom
  2. {
  3.    private int note;
  4.  
  5.    public int Note
  6.    {
  7.        get
  8.        {
  9.            return this.note;
  10.        }
  11.        set
  12.        {
  13.            this.note = value;
  14.        }
  15.    }
  16. }


 
Ensuite, plutôt que de retourner un int sur ton "SetStudent" (que je renommerais "AddStudent" ) lève une exception quand il n'y a plus de place. Plus propre je trouve.

Code :
  1. throw new Exception("Plus de place dans le binome !" );


 
Ou comme dit Taz, retourne un bool. Dans tous les cas, le int porte à confusion, on peut croire que c'est l'index où est inserré l'étudiant dans ton binome.
 
Sinon, ta phrase là, c'est une question ou ce qu'il se passe ? Parceque ça se comporte pas comme ça normalement.

n°1634867
Saubin
Posté le 31-10-2007 à 17:37:10  profilanswer
 

Merci MagicBuzz c'est très sympa les propriétés d'accesseurs c'est bien sympa!
 
Pour le SetStudent je suis entièrement d'accord mais mon prof est un peu...et il veut que des get et des set dans les class mais je send que je vais faire comme je le send il me saoule un peu avec ses principes à la c**

n°1634886
MagicBuzz
Posté le 31-10-2007 à 17:54:19  profilanswer
 

Bah d'autant qu'utiliser les mécanismes du C# pour faire justement proprement des Get/Set, c'est quand même mieux que de multipliser les méthodes qui nuisent à la lisibilité de la classe (imagine une classe genre Form() avec que des propriétés accessibles par 2 méthodes à chaque fois...
 
Sinon, si tu as besoin de faire des copies complètes de tes objets (et donc ne plus bosser sur des références), voici un exemple :

Code :
  1. using System;
  2.  
  3. namespace TestConsole
  4. {
  5.    class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.            ObjDeBase o1 = new ObjDeBase("toto", 1);
  10.            ObjDeBase o2 = o1;
  11.            o2.Val2 = 2;
  12.            Console.WriteLine(o1.Val2);
  13.  
  14.            ObjClonable o3 = new ObjClonable("titi", 3);
  15.            ObjClonable o4 = (ObjClonable)o3.Clone();
  16.            o4.Val2 = 4;
  17.            Console.WriteLine(o3.Val2);
  18.  
  19.            Console.ReadKey(true);
  20.        }
  21.    }
  22.  
  23.    public class ObjDeBase
  24.    {
  25.        private string _val1;
  26.        private int _val2;
  27.  
  28.        Exception myExeption = new Exception("Valeur 2 incorrecte" );
  29.  
  30.        public ObjDeBase(string valeur1, int valeur2)
  31.        {
  32.            this.Val1 = valeur1;
  33.            this.Val2 = valeur2;
  34.        }
  35.  
  36.        public string Val1
  37.        {
  38.            set
  39.            {
  40.                this._val1 = value;
  41.            }
  42.            get
  43.            {
  44.                return this._val1;
  45.            }
  46.        }
  47.  
  48.        public int Val2
  49.        {
  50.            set
  51.            {
  52.                if (value > 100 || value < 0)
  53.                    throw myExeption;
  54.                this._val2 = value;
  55.            }
  56.            get
  57.            {
  58.                return _val2;
  59.            }
  60.        }
  61.    }
  62.  
  63.    public class ObjClonable : ICloneable
  64.    {
  65.        private string _val1;
  66.        private int _val2;
  67.  
  68.        Exception myExeption = new Exception("Valeur 2 incorrecte" );
  69.  
  70.        public ObjClonable(string valeur1, int valeur2)
  71.        {
  72.            this.Val1 = valeur1;
  73.            this.Val2 = valeur2;
  74.        }
  75.  
  76.        public object Clone()
  77.        {
  78.            return this.MemberwiseClone();
  79.        }
  80.  
  81.        public string Val1
  82.        {
  83.            set
  84.            {
  85.                this._val1 = value;
  86.            }
  87.            get
  88.            {
  89.                return this._val1;
  90.            }
  91.        }
  92.  
  93.        public int Val2
  94.        {
  95.            set
  96.            {
  97.                if (value > 100 || value < 0)
  98.                    throw myExeption;
  99.                this._val2 = value;
  100.            }
  101.            get
  102.            {
  103.                return _val2;
  104.            }
  105.        }
  106.    }
  107. }

n°1634949
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 31-10-2007 à 21:51:09  profilanswer
 

Saubin a écrit :


Pour le SetStudent je suis entièrement d'accord mais mon prof est un peu...et il veut que des get et des set dans les class mais je send que je vais faire comme je le send il me saoule un peu avec ses principes à la c**


ridicule ce prof... les properties existent depuis le début dans C#, je vois pas pourquoi il ne veut pas les utiliser... encore un qui ne jure surement que par Java tiens...

n°1634968
Saubin
Posté le 31-10-2007 à 22:55:56  profilanswer
 

Harkonnen a écrit :


ridicule ce prof... les properties existent depuis le début dans C#, je vois pas pourquoi il ne veut pas les utiliser... encore un qui ne jure surement que par Java tiens...


Oui exactement il jure que pars java, d'ailleurs il ramène tout à java...

n°1634970
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 31-10-2007 à 23:05:00  profilanswer
 

faut lui dire que C# pallie à un truc assez pénible de Java : l'obligation de définir des getters et setters pour les variables membres (les fameux setMachin() et getMachin() bien lourdingues). les properties sont bien plus intuitives à lire que les accesseurs made in Java :sarcastic:

 

et si jamais la suite du programme consiste à utiliser des interfaces pour la programmation évenementielle (par exemple, comme Java et ses interfaces listeners à implémenter), alors parle lui donc des delegates...

 

y'a des jours ou j'ai envie de vitrifier le corps enseignant moi....


Message édité par Harkonnen le 31-10-2007 à 23:05:29
n°1635120
Saubin
Posté le 01-11-2007 à 16:02:25  profilanswer
 

^^, pas de soucis, on utilise des interfaces oui! Mais qu'est ce que tu apelles de la prog évenementielle? Je vais voir ce que c'est que les delegates ;)

n°1635165
Tamahome
⭐⭐⭐⭐⭐
Posté le 01-11-2007 à 17:36:51  profilanswer
 

j'aimerais bien éxécuter FXCop sur ton code, ca doit etre rigolo
 
[:blessure]


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1635176
Saubin
Posté le 01-11-2007 à 18:19:20  profilanswer
 

Ca ferait quoi?

n°1635188
Lamarmotte
Posté le 01-11-2007 à 19:00:54  profilanswer
 

oh il serait sûrement très bavard....

n°1635189
Saubin
Posté le 01-11-2007 à 19:03:13  profilanswer
 

Ouki je vois ce que c'est, désolé y a un début à tout ça peut pas être parfait de suite ;)

n°1635377
MagicBuzz
Posté le 02-11-2007 à 09:35:35  profilanswer
 

Lamarmotte a écrit :

oh il serait sûrement très bavard....


En parlant de ça.
 
Dans mon dernière exemple, j'avais fait hériter "ObjClonable" de "ObjDeBase" et de "IClonable".
 
Mais cet empaffé n'a jamais rien voulu compiler, comme quoi il n'avait pas de constructeur sans argument, après comme quoi il n'avait pas de constructeur avec deux arguments. Si je les créait, il plantait sur l'instanciation du truc en râlant que le type de base était merdé aussi ou je sais pas quoi... Du coup j'ai laissé tomber, mais ça me fends l'anus en deux ce truc.
J'ai oublié un truc ?
 

Code :
  1. public class ObjClonable : ObjDeBase, IClonable
  2. {
  3.    public object Clone()
  4.    {
  5.        return this.MemberwiseClone();
  6.    }
  7. }


 
=> Aucune idée de pourquoi ça veut pas compiler ! Une idée ?

n°1635593
greg0488
Posté le 02-11-2007 à 15:51:10  profilanswer
 

bonjour g un gros pb je comprend rien au tableau qqn peut m'expliquer pourquoi ce prog par exempl ne foncionne pas c'est un programme qui est cense saisir des donnéé au clavier dans un tableau et apres on peux chercher l'adresse d'une valeur ou pas #include<stdio.h>
#include<stdlib.h>
 
int main(void)
{
    int i,x,Case;
   
    int Tab[10];
    for(i=0;i<10;i++)
    {
     printf("Valeur %d :\n",i+1);
     scanf("%d",& Tab[i]);
     }
    printf("entrez la valeur du nombre a rechercher:\n" );
    scanf("%d",&x);  /**X=...**/
    for(i=0;i<10;i++);
    {
     if(Tab[i]==x)
      {
       Case=i;
       printf( "la valeur est presente en posisition%d\n",Case);
      }
      else
      {printf("le nombre est absent\n" );}
    }
     
system("pause" );
return 0;
}

n°1635598
Elmoricq
Modérateur
Posté le 02-11-2007 à 15:57:36  profilanswer
 

Multipost [:florentg]


Message édité par Elmoricq le 02-11-2007 à 15:57:46
n°1635656
Tamahome
⭐⭐⭐⭐⭐
Posté le 02-11-2007 à 17:52:09  profilanswer
 

greg0488 a écrit :

bonjour g un gros pb je comprend rien au tableau qqn peut m'expliquer pourquoi ce prog par exempl ne foncionne pas c'est un programme qui est cense saisir des donnéé au clavier dans un tableau et apres on peux chercher l'adresse d'une valeur ou pas #include<stdio.h>
#include<stdlib.h>
 
int main(void)
{
    int i,x,Case;
   
    int Tab[10];
    for(i=0;i<10;i++)
    {
     printf("Valeur %d :\n",i+1);
     scanf("%d",& Tab[i]);
     }
    printf("entrez la valeur du nombre a rechercher:\n" );
    scanf("%d",&x);  /**X=...**/
    for(i=0;i<10;i++);
    {
     if(Tab[i]==x)
      {
       Case=i;
       printf( "la valeur est presente en posisition%d\n",Case);
      }
      else
      {printf("le nombre est absent\n" );}
    }
     
system("pause" );
return 0;
}


 
quelle est ta question sur le C# ?


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°1635745
MagicBuzz
Posté le 02-11-2007 à 20:17:19  profilanswer
 

et moi ? pkoi ça hérite pas ?

n°1640850
Tamahome
⭐⭐⭐⭐⭐
Posté le 11-11-2007 à 11:01:08  profilanswer
 

parce que tu codes avec des moufles ? :D


---------------
Hobby eien /人◕ ‿‿ ◕人\
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] Question de débutant

 

Sujets relatifs
Débutant Demande Conseil Sur C++petit question sur un petit probléme
Debutant traitement xmlQuestions pour un débutant en CSS
Conseils a donner à un débutant[debutant][résolu]C++ et QT4...Conversion de type??
XLS de débutantExo dos débutant
Question très difficile: récup d'une portion de chaîne et substitution 
Plus de sujets relatifs à : [C#] Question de débutant


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR