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 :

comprendre les méthodes statiques


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 101
    Points : 68
    Points
    68
    Par défaut comprendre les méthodes statiques
    Bonjour,

    c'est une question banale.
    En fait c'est une chose que j'ai toujours fait sans savoir pourquoi.
    En fait ma question est de savoir pourquoi dans une méthode statique, on ne peut faire appel qu'à des propriétés statiques.

    Thx 4 ur explanations.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Car une méthode statique n'est pas une méthode d'instance.
    Si je prends ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Toto
    {
        public static void SayHello()
        {
            // On voudrait accéder à i ici
        }
     
        public int i=0;
     
        public Toto()
        { }
    }
    Si je n'ai pas créé d'instance de Toto, a quel i je vais accéder puisqu'il n'y a aucun Toto dans la nature?
    Si je créé une instance de Toto on pourait éventuellement imaginer qu'il accède à l'instance.
    Si je crée deux instances toto1 et toto2 de Toto, auquel i j'accède? Celui de toto1? Celui de toto2?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Une méthode statique est un membre statique donc partagé par toute instance d'une classe. Elle n'a pas le droit de toucher aux membres d'instance utilisables uniquement par une instance de la classe. Donc logique que tu puisses accéder aux propriétés statiques et pas aux propriétés d'instance.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Une méthode statique est la même pour toutes les instances de cette classe. C'est la raison pour laquelle on peut appeler une méthode statique depuis une méthode d'instance (Depuis un objet en fait).

    Par contre, comment faire pour appeler une méthode non statique, qui appartient à un objet déterminé, depuis une méthode statique ? Ce n'est pas possible.

    Petit exemple :

    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
    19
    20
    public class Humain
    {
        private string _sexe;
     
        public Humain(string sexe)
        {
            this._sexe = sexe;
        }
     
        public string GetSexe()
        {
            return this._sexe;
        }
     
        public static string GetClassName()
        {
            return "Humain";
        }
     
    }
    Je crée deux humains : Un homme et une femme. Si je veux appeler la méthode GetSexe() il faut que je l'appelle sur l'objet. Je ferais donc homme.GetSexe(); ou femme.GetSexe(); car j'ai affaire aux objets. Si je fais Humain.GetClassName(); je n'appelle pas la méthode sur un objet, mais sur la classe elle même, car un méthode statique est une méthode de classe.

    Imaginons que je veuille appeller une méthode d'objet depuis ma méthode statique, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static string GetClassName()
    {
        return GetSexe();
    }
    Que devrait me retourner cette méthode ? homme ou femme ? Sachant qu'elle est commune aux deux objets. Du coup, ce n'est pas possible.

  5. #5
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    Citation Envoyé par MaximePalmisano Voir le message
    Par contre, comment faire pour appeler une méthode non statique, qui appartient à un objet déterminé, depuis une méthode statique ? Ce n'est pas possible.
    Par définition une méthode statique n'est pas propre à une instance, mais à une classe. Cela dit, c'est tout à fait possible d'appeler une méthode non statique d'une instance d'objet dans une méthode qui elle est statique. Tout simplement en passant en paramètre une instance de la classe en question à ta méthode statique.

    En fait, pour pouvoir manipuler une instance (donc appeler des propriétés, des fonctions de l'instance), il faut passer à ta méthode statique une référence (si c'est un type référence) ou une valeur (pour les types valeur) à exploiter. Exception faite des méthodes d'extension, en effet quand tu appelles une méthode d'extension, tu n'as pas besoin de passer une instance d'objet à ta méthode, cela dit, la signature d'une méthode d'extension a pour premier argument le type étendu.

    Bon dév.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Points : 945
    Points
    945
    Par défaut
    Euh, je crois que tu essayes de répondre à la réponse de la question Je n'ai pas de soucis avec les méthodes statiques personnellement

  7. #7
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 101
    Points : 68
    Points
    68
    Par défaut
    merci ,
    pour vos réponses.
    c'est très clair.

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

Discussions similaires

  1. Comprendre les méthodes SHOW et SHOWMODAL
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 3
    Dernier message: 02/03/2022, 14h38
  2. La POO et les méthodes statiques
    Par IsraGab dans le forum Langage
    Réponses: 1
    Dernier message: 14/07/2013, 17h43
  3. question sur les méthodes statique
    Par yacin87 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 14/04/2010, 10h32
  4. Réponses: 19
    Dernier message: 05/06/2007, 08h13
  5. [Singleton] Différences avec méthodes statiques
    Par Franche dans le forum Design Patterns
    Réponses: 1
    Dernier message: 26/02/2003, 17h10

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