Quelle est l'utilité de déclarer une methode static et quelles sont les conditions et est ce qu'une classe contenant une methode static peut etre instancier.
Version imprimable
Quelle est l'utilité de déclarer une methode static et quelles sont les conditions et est ce qu'une classe contenant une methode static peut etre instancier.
Une méthode static permet d'utiliser cette méthode sans avoir à instancier un objet de ta classe. L'intérêt, comme le décrit msdn est que
Si ta classe n'est pas déclaré comme static, elle peut être instancier même si elle comporte une méthode static.Citation:
Les membres statiques sont souvent utilisés pour représenter des données ou des calculs qui ne changent pas en fonction de l'état d'un objet
Une méthode statique est utile s'il n'est pas nécessaire de passer par une instance pour l'utiliser. L'exemple classique ce sont les classes utilitaires (System.Math, System.IO.Path, ...), qui sont qui plus est déclarées comme statiques.
Sinon il n'y a aucun problème pour instancier une classe possédant des membres statiques. Sauf évidemment si la classe est elle même statique.
j'ajoute qu'une instance de ta classe ne peut pas utiliser la methode static (enfi c'est ce que je pense) je laisse la confirmation pour les experts :oops:
Et pour une classe static, faut il que tous ces membres soient static?(même les attributs)
Oui il faut que tous ses membres soit static.
Et je pense que tarik a raison aussi, une instance de classe ne peut utiliser une méthode static.
Merci, c'est plus clair maintenant.
Contrairement à ce qui est affirmé supra, une instance de classe peut très bien utiliser une méthode static
Sur msdn :
Citation:
Si des instances de la classe sont créées, elles ne peuvent pas être utilisées pour accéder au membre statique
Ne confondons pas : il s'agit uniquement de l'aspect "syntaxique"?.
Exemple ;
En revanche dans une instance de la classe (dans le code d'une méthode d'instance ou d'un accesseur) on peut parfaitement appeler les méthodes static de la classe.Code:
1
2
3
4
5
6
7
8 MyClass a = new MyClass(); // on ne peut pas écrire a.MyStaticMethod(); // on doit ecrire MyClass.MyStaticMethod();
C'est peut être dans ce cas juste un problème de formulation.
Ok on est d'accord,on s'était mal compris :P
Si je résume :
– Une classe qui contient une méthode static peut être instanciée.
– Une méthode est déclaré static si le traitement à l’intérieure de cette méthode est indépendant de l’état de l’objet.
– Une méthode static est appelée au niveau de la classe et non au niveau des instances.
– Si une classe est déclaré static, tous les membres de la classe doivent, obligatoirement, être static
– Une classe déclarer static ne peut pas avoir de constructeurs d’instance.