olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
3 mars 2008 à 21:39
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
4 mars 2008 à 09:40
Bonsoir
Je n'ai hélas toujours pa bien compris le mecanisme de visibilité des variables en C# (pourtant en c je n'ai pas de problème avec ca)
Dans la classe d'une form (MainForm) je declare qq variables
Jez voudrais acceder a ces variables depuis une autre form MainForm.maVariable
Mais je constate que pour certaines il suffit de les declarer public, pour d'autres il faut les déclarer static et public ???
Quelle est la regle et / ou la bonne maniere de faire
Dans l'exemple ci apres seuls PntF et dsAddr sont visibles depuis l'autre form
dsAddr doit etre static
PntF peu etre public !
Mais je crois que j'ai compris en partie : PntF est considéré comme type et DOIT etre instancié donc pas de problème pour en parler au voisin
Tandis que dsAddr a été instancié dans MainForm donc on ne pourra le voir que s'il a été boulonné static
Me trompe je ?
Mais cela veut il dire que toute variable partagée par deux form dans une troisieme classe commune doit aussi etre déclarée static ?
Ne fais-je pas une grosse erreur conceptuelle
public partial class MainForm : Form
{
MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection();
static public DataSet dsAddr = new DataSet();
public struct PntF
{
public double X;
public double Y;
};
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 3 mars 2008 à 23:09
Salut,
Le mot clé "static" modifie la durée de vie d'une variable, une variable statique existe même sans aucune instance de son type. ( Il est possible de déclarer une classe statique mais ça n'a pas la même signification ).
// dsAddr est une variable, de la mémoire est allouée.
static public DataSet dsAddr = new DataSet();
// PntF est un type, rien n'est encore alloué.
public struct PntF
{
public double X;
public double Y;
};
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201436 4 mars 2008 à 09:12
je voudrais préciser un truc...
le mot clé static modifie comme l'a dit lutinore la durée de vie d'une variable... mais surtout attache cette variable à la classe plutot qu'à l'instance.
En gros, sans le mot clé static il faut que tu instancies ta classe pour accéder à ta variable... mais avec, il te suffit de faire [class].[variable].
Attention toutefois, ça pose aussi des problèmes car il est impossible d'utiliser le mot clé this dans une méthode static.
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 3 mars 2008 à 23:20
Merci Lutinore
Oui bien c'est ce que je commence a comprendre
Mais je suis pas encore satisfait pour ce que je veux faire
Je commence a comprendre que si je veux utiliser des elements d'une form dans une autre, la maniere la plus elégante c'est de rassembler ces elements dans une classe que je passerai au constructeur de ma Form tandis que la methode de declaration statique public est peut etre plus rapide mais plus bricolée.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 3 mars 2008 à 23:42
Oui c'est ça, contrairement au C, les variables globales n'existent pas, elles doivent être déclarées dans une classe. Une classe statique peut simuler une portée globale.
Vous n’avez pas trouvé la réponse que vous recherchez ?
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 3 mars 2008 à 23:59
Merci
De toute façon meme en C je n'ai jamais aimé les variables globales, mais parcimonieusement c'est parfois tres pratique si on veut eviter de passer des parametres en cascade en chipotant dans tous le code
La maniere dont j'evitais ca en C est de declarer une structure container commune Prm que je prends soin passer depuis le main a chaque fonction. En pratique c'est tres souple, simple a maintenir et tres agreable a exploiter
Par contre en C# je tatonne encore pour rendre certains parametres facilement accessible sans devoir faire trop de gymnatique
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 4 mars 2008 à 09:40
Yess
Merci j'avais effectivement constaté est c'est evidement normal.
En fait on définit un objet commun contenants les truc qu'on aimerait avoir toujours sous la main !
Avec prudence et pacimonie ca peut etre tres pratique et faciliter certaines choses ..