Static ou pas ?

Résolu
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 - 14 sept. 2005 à 09:25
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 14 sept. 2005 à 15:33
Salut,



voilà j'ai une question qui requiert une explication :



Voilà le code posant pb :

private static uint OpenPort_Raw_In(string portName)

{

try

{


return CreateFile(portName,
GENERIC_READ, 0, 0, OPEN_EXISTING, 0, IntPtr.Zero);

}

catch (MissingMethodException e)

{

if (maj_textbox_accueil != null)

{



EventArgs_Affichage a = new EventArgs_Affichage();


a.Message =
"Pb CreateFile : " + PortName + "\r\n";

maj_textbox_accueil(this, a);

}

return INVALID_FILE_HANDLE;

}

}

Les mots soulignés posent pb, et j'ai ce message d'erreur :

Une référence d'objet est requise pour la propriété, la méthode ou le
champ non statique 'Navette_BT_ppc.Connexion_Serie.maj_textbox_accueil'



Portname est déclarée comme ceci dans mes variablres globales :

private string PortName = portNameNotSet ;

maj_textbox_accueil est un évènement que je déclenche quand je veux rajouter du texte à une textbox d'une autre forme.

Il est déclarée comme ceci :

public delegate void Affichage_EventHandler(object sender, EventArgs_Affichage e);

public event Affichage_EventHandler maj_textbox_accueil;



Je viens d'essayer d'enlever "static" à la fonction Open_Raw_in,et je
n'ai plus les erreurs. Le problème, c'est que si j'ai mis static au
départ, je pense qu'il y avait une raison, mais je ne me souviens plus
laquelle.



Est-ce que qqln sait si je dois mettre static ou pas, et pourquoi ?
A voir également:

5 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 sept. 2005 à 11:42
un membre static est accessible même lorsque l'objet n'est pas instancié.



en gros :

tu as une classe Toto avec 2 méthodes d'instances (normales) : Titi, Tata et 1 méthode static Tutu



Pour utiliser les méthodes Titi et Tata, tu es obligé de créer un nouvel objet :

Toto t = new Toto();

t.Titi();

t.Tata();



Par contre tu peux utiliser la méthode Tutu car elle est static :

Toto.Tutu();

ou t.Tutu();




Sébastien FERRAND
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
14 sept. 2005 à 15:33
Salut, les méthodes statiques ne connaissent pas la variable "this" elles permettent de manipuler les variables statiques qui sont initialisées avant même l'instanciation d'un objet. L'important c'est pas de comprendre à quoi servent les méthodes statiques mais plutôt de comprendre les variables statiques. Dans ton cas tu n'as pas besoin de déclarer ta méthode en statique.
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 sept. 2005 à 09:50
en fait, si tu mets static tu dois mettre :

private static string PortName = 1325 ;


par contre, tu ne pourras pas déclencher d'évènement puisque c'est lié à une instance.

La seule solution que je vois pour toi, c'est d'utiliser un Singleton.


Sébastien FERRAND
0
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
14 sept. 2005 à 11:37
Hmmm, c'est pas très clair,



dans l'ex il s'agit de mettre une classe en tant que singleton. Ici, je mets quoi en tant que singleton ?

ps : j'ai enlevé static de la procédure et ca marche. Tu penses que je peux faire fonctionner comme ca ?

L'intérêt de mettre static devant une méthode, c'est quoi ? Il faut que
toutes les variables qui sont dans cette méthode soient static ?



Je sens que je vais laisser tourner comme ça, ça a l'air de marcher. Tant pis pour le static.



"les membres statiques étant accessibles uniquement par le nom de la classe et pas par un nom d'instance"

> késako ? "pas par un nom d'instance", je comprends, mais "par le nom de la classe" tu aurais un exemple ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
14 sept. 2005 à 11:57
ok merci pour cette explication,



mais rajouter static à une méthode de classe ne restreint-il pas les
variables qui sont utilisées au sein de cette méthode à être static
elles aussi ? (comme pour portname et mon event ?)
0
Rejoignez-nous