Bonjour
Je veux avoir des argument de pour et de contre pour l'utilisation de méthodes statiques ou non.
L'idée c'est d'avoir une liste d'avantages/inconvénients lié à l'utilisation de methodes statique ou non
D'avance merci
Bonjour
Je veux avoir des argument de pour et de contre pour l'utilisation de méthodes statiques ou non.
L'idée c'est d'avoir une liste d'avantages/inconvénients lié à l'utilisation de methodes statique ou non
D'avance merci
salut
en gros
une classe statique,tu peux y acceder de partout..Si tu as des variables globales, ca peut etre interessant de l'utiliser.
Sinon, ca peut se "substituer" à un singleton...
L'avantage d'une classe statique c'est que tu ne l'instancies pas quinze fois. C'est pour moi utile dans le cas de librairie qui fournissent des méthodes de traitement etc... et qui ne seraient pas "forcément" sympa de mettre dans une classe dynamique
Pour moi, l'interet le plus interessant reste l'accessibilité depuis n'importe ou dans le code
(comme la classe Application par exemple)
The Monz, Toulouse
Imaginons une classe AxeSym dédiée à un axe de symétrie, on aura par exemple :
- le constructeur AxeSym(pt1,pt2) définissanr l'axe
- la fonction PointSymetrique(pt) fournissant le symétrique d'un point,
- ...
Supposons que l'on veuille rajouter dans la classe AxeSym une fonction PointSymStatic(pt,ptA,ptB) qui fournisse le symétrique du point pt par rapport à la droite ptA-ptB : avec une méthode statique, utiliser le constructeur n'est plus indispensable et on peut faire directement appel à PointSymStatic.
Salut,Drole de remarque. Une methode statique est une classe. En tant que tel, l'accessiblité n'est définie que par le modifiers et les références. Je veux dire qu'une classe non static peut aussi être accessible de partout.
L'avantage d'une méthode statique c'est qu'il n'est pas nécessaire d'instancier la classe si elle n'a pas de constructeur.
Si la classe est static (n'a pas de constructeur et est noté comme static), on ne peut pas avoir deux instances (versions) de la classe. Cela peut poser un pb si on veut faire une collection car toute la collection reférencera la même classe. A vérifier tout de même.une classe statique,tu peux y acceder de partout..
Pour ce qui est de la relation avec le singleton, un singleton est une instance unique d'une classe au niveau de l'application. Le singleton est commun à tous les internautes qui surfent sur un site.
A+
"Winter is coming" (ma nouvelle page d'accueil)
Euh, suis-je le seul a penser que la question n'a aucun sens ?
Soit la methode est liee tres fortement a un objet (je sais pas moi, maCommandesql.Execute() par exemple), soit elle est "purement" fonctionnelle, c'est a dire qu'elle a n entrees et crache (ou pas) une sortie, en faisant potentiellement un truc rigolo entre les deux (style MessageBox.Show())
Non, vraiment, je comprends pas.
Euh, non... une methode statique est une methode statique. Dans une classe, qui elle peut etre statique ou pas.
On ne peut pas en avoir deux parce qu'on ne peut pas en avoir une : les classes statiques ne sont pas instanciables.Si la classe est static (n'a pas de constructeur et est noté comme static), on ne peut pas avoir deux instances (versions) de la classe.Ben non on peut pas la referencer parce qu'on ne sait referencer que des instances, et la y'a pas d'instance.Cela peut poser un pb si on veut faire une collection car toute la collection reférencera la même classe.
Les classes statiques (CS) n'ont rien a voir avec le sujet du thread. une CS, ce n'est qu'une classe non instanciable et non derivable. Elles ont ete rajoutees au framework dans le seul but (probablement) de representer des "collections" de fonction statiques, a la maniere de System.Math.
personnellement j'utilise les "static" dans 2 cas seulement:
1) les cas obligatoir(FindAll, Predicate reclame des static si je ne me trompe...)
2) les fonctions asser general que tu utiliseras asser souvent
exemple: j'ai utiliser une classe static nommer "GenererChaineDeConnexion" avec des fonctions static "MySQL ; SQLServeur ; Access"
ces fonctions generer des chaine de connexion
ainsi dans ma librairie je pouvais, sans me "prendre la tête" avec une instantiation inutile generer mes chaine de connexion
Oui, je me suis mal exprimé. Une méthode statique est de toutes façons dans une classe. On ne peut y accéder sans faire appel à la classe dont elle est membre. A ce titre elle est accessible, visible comme n'importe quelle classe: suivant ses "modifiers" et la façon dont elle est référencée. Le fait qu'une méthode soit static ne présage rien de son accessibilité.
Oui, effectivement.
Pour ne pas perdre de vue la question de départ, vu qu'il n'y a pas forcement bcp d'inconvénients à utiliser des méthodes statiques, peut-être pourrions-nous poser la question dans ce sens: qu'est-ce qui devrait empêcher une méthode d'être statique? Dans quelles conditions devrions-nous d'abords avoir une instance avant d'appeler une méthode?
L'idée serait de tirer profit du constructeur dans lequel il est possible d'executer de manière systematique un morceau de code. Et encore car cela peut-être fait dans la méthode elle-même. Le constructeur n'est jamais qu'une méthode executé systematiquement.
Quand on a une methode static au sein d'une classe instanciable, est-ce que cela ne créé pas une instance implicitement? Heu, non, je viens de faire le test.
Pour: facile à utiliser car pas besoin de l'instancier.
Contre ou plutôt nécessaire d'avoir une instance: quand on doit avoir un objet à manipuler et que la méthode s'execute avec des données contenues dans l'instance.La methode "MaMethode(int a, int b)" n'a pas le droit d'utiliser "_a" ou "_b".
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
21
22 public class Class1 { public Class1() { } public Class1(int a, int b) { this._a = a; this._b = b; } private int _a; private int _b; public int MaMethode() { return this._a + this._b; } public static int MaMethode(int a, int b) { return a + b; } }
A+
"Winter is coming" (ma nouvelle page d'accueil)
Evidemment on peut faire tout un programme avec uniquement des methodes statiques. Comme on peut courir le cent metres avec les deux jambes liees. Moins vite, mais on peut. Mais bon, voila quoi. Si on veut pas faire de POO, on fait pas du C#.
La notion de statique a un sens parce que la POO est entre autres basée sur la notion d'encapsulation, et que les méthodes d'instance ne sont que des méthodes qui ont acces aux membres privés et prennent de facon masquée un pointeur vers l'instance d'ou vient l'appel.peut-être pourrions-nous poser la question dans ce sens: qu'est-ce qui devrait empêcher une méthode d'être statique? Dans quelles conditions devrions-nous d'abords avoir une instance avant d'appeler une méthode?
Donc si une methode a besoin de lire / ecrire des membres d'une classe, autant en faire un methode d'instance de cette classe. Ca permet de mettre un certain nombre de champs en prive, bref on encapsule quoi.
Pour completer ce que je disais tout a l'heure, tout ne rentre de pas dans le moule POO (System.Math notamment), ca justifie l'existence de methodes statiques. Mais dans un projet, en volumetrie, c'est tres mineur.L'idée serait de tirer profit du constructeur dans lequel il est possible d'executer de manière systematique un morceau de code. Et encore car cela peut-être fait dans la méthode elle-même.
Du DOS?Evidemment on peut faire tout un programme avec uniquement des methodes statiques
Illustré ci-dessus. Ce qui amène une constatation, il n'est peut-être pas utile d'avoir une méthode statique dans une classe non statique puisqu'elle ne peut pas utiliser les membres de la classe. Ce serait un peu un intrus, non?
Dans les deux cas, la classe "Class1" réalise les mêmes opérations. Pourtant, la méthode "MaMethode(int a, int b)" est plus facile à utiliser.
Du coup, une methode statique est interessante dans le cas d'une utilisation "One shot". Une methode non statique accompagnée de son instance est nécessaire pour executer une méthode quand l'objet dans lequel elle se trouve est dans un état bien determiné.
Cela n'a pas forcement de rapport direct, mais FXCop recommande de taguer une classe comme statique si elle ne comporte que des méthodes statiques.
"Winter is coming" (ma nouvelle page d'accueil)
Partager