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 :

Questions sur les classes en C#


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 81
    Points
    81
    Par défaut Questions sur les classes en C#
    Bonjour,


    1) Est-ce qu'il est possible en C# d'appeler une méthode qui modifie une variable sans avoir à l'appeler. Je m'explique:
    Exemple: J'ai une classe "Toto" avec un element "x"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Toto
    {
      private int x;
      public void SetX(int value)
      {
        x = value;
      }
      public int GetX(void)
      {
        return x;
      }
    }
    Je voudrais pouvoir modifier/récupérer la valeur de "x" sans utiliser GetX et SetX mais en faisant:
    Toto titi;
    titi.x = 4;
    int test = titi.x;

    Et ce, sans avoir à déclarer x comme public (pour pouvoir faire des opérations lors de l'affectaion ou la déclaration d'une valeur).

    Pour résumer, je voudrais pouvoir appeler des méthodes sans utilier "()" pour modifier ou récupérer des valeurs.

    2) Est ce qu'il est possible, comme en C++ de contrôler les cast d'une classe (désolé, je connais pas les mots pour l'expliquer).

    Exemple: J'ai une classe VECTOR3 que je veux donner en argument à une méthode qui prend comme paramètre un tableau de float.

    En C++ je peux faire une classe comme celle-ci:

    Code : 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
    17
    18
     
    class VECTOR3{
    public:
     
    	float Array[3];
     
    	VECTOR3()
    	{
    		x = 0.0f; y = 0.0f; z = 0.0f;
    	};
     
    	inline operator float*() 	
    	{ 		
    		return Array; 	
    	}
     
    	~VECTOR3(){};
    };
    et la passer en argument à une méthode:

    VECTOR3 toto;
    MaMethode(toto);

    avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void MaMethode(float* arg){...}

  2. #2
    Membre expérimenté Avatar de LaChips
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 109
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour,
    Oui c'est possible mais avec les get / set

    ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Toto
    {
      private int x;
      public int X
      {
        set { x = value; }
        get { return x; }
      }
    }
    et après tu y accèdes :
    Toto titi;
    titi.x = 4;
    int test = titi.x;
    Ingénieur Multimédia - TMM Communication

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Bonjour pour la première partie, C# utilise des accesseurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private int x;
    public int X {
       get { return x; }
       set { x = value; }
    }
    value est un mot-clé C# qui représente la valeur lors de l'assignation.

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Et pour la deuxième partie, avec les opérateurs de conversion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Machin()
    {
        private float[] tableau;
        public static implicit operator float[](Machin machin)
        {
            return machin.tableau;
        }
    }
    Si tu remplaces implicit par explicit, ca rend le cast obligatoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public f(float[] tab) {...}
    f(machin); // compile que si le cast est "implicit"
    f((float[])machin); // compile d
    ಠ_ಠ

  5. #5
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Et pour la deuxième partie, avec les opérateurs de conversion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Machin
    {
        private float[] tableau;
        public static implicit operator float[](Machin machin)
        {
            return machin.tableau;
        }
    }
    Si tu remplaces implicit par explicit, ca rend le cast obligatoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public f(float[] tab) {...}
    f(machin); // compile que si le cast est "implicit"
    f((float[])machin); // compile dans les deux cas.
    ಠ_ಠ

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 81
    Points
    81
    Par défaut
    Merci beaucoup. Je vais tester ça ce soir.

    Quelques demandes de précisions:

    1) Et est que le nom "X" doir avoir un rapport avec "x".
    Est ce que je peux faire ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private int gogo[4];
    public int X {
       get { return gogo[3]; }
       set { gogo[3] = value; }
    }
    Toujours pour pouvoir faire:
    Toto titi;
    titi.x = 4;
    int test = titi.x;

    "X" devient forcement "x" ? Comment faire si j'ai une variable que je veux appeler "X" (titi.X)

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    1) Oui, il n'y a aucun rapport entre X et x. Les propriétés sont notées en case pascal en général. Enfin, private int gogo[4] veut rien dire je crois

    2) Je comprends pas la question...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 81
    Points
    81
    Par défaut
    2) Je comprends pas la question...
    Quelle question ? Dans mon dernier message ou dans mon premier message ?

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Toujours pour pouvoir faire:
    Toto titi;
    titi.x = 4;
    int test = titi.x;

    "X" devient forcement "x" ? Comment faire si j'ai une variable que je veux appeler "X" (titi.X)
    Ca

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 81
    Points
    81
    Par défaut
    C'est parce que je vois que "X" (en majuscule) est déclaré pour ensuite utiliser "x" (en minuscule) donc je me demandais si les majuscules et minuscules avaient une importance

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Citation Envoyé par greg2 Voir le message
    C'est parce que je vois que "X" (en majuscule) est déclaré pour ensuite utiliser "x" (en minuscule) donc je me demandais si les majuscules et minuscules avaient une importance
    Salut,

    oui, C# est sensible à la casse. En fait, le fait d'avoir une propriété avec une majuscule et le champs avec une minuscule, cela fait parti des regles de nommage. Apres, tu peux tout à fait avoir une propriété nommée "X" et qui renvoie ou modifie un champs nommé "y". Techniquement ca ne pose pas de probleme, c'est juste un peu tordu, ou en general, tu nommes tes propriété suivant le champ qu'elle manipule (si tenté qu'elle manipule un champ specifique).

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Points : 81
    Points
    81
    Par défaut
    Ok. Merci.

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

Discussions similaires

  1. Question sur les classes (car problème lors de la compilation)
    Par beegees dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 09/10/2009, 17h23
  2. question sur les classes "static"
    Par Asmod_D dans le forum C++
    Réponses: 4
    Dernier message: 05/04/2009, 17h27
  3. Questions sur les classes.
    Par Lartiste007 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/04/2009, 14h46
  4. Questions sur les classes.
    Par DarkSeiryu dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/02/2009, 09h21
  5. Un question sur les classes
    Par willycat dans le forum C++
    Réponses: 10
    Dernier message: 22/08/2008, 17h55

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