Conseil sur l'utilisation de la mémoire :utilisation de static [Résolu]

Signaler
Messages postés
346
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
3 septembre 2007
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour , voila, j'ai besoin d'avoir une liste de constante accessible par plusieurs classes.
J'ai donc décidé de créer une classe qui contiendrait toutes ses constantes.

Dans les lcasses ou j'utilise ces constantes, je n'ai pas envie de déclaré une instance de cette classe de constante.
J'ai donc mis toutes mes constantes en static comme suit :

 class MesConstantes
{
  public static string Const1 = "Bonjour";
  public static string Const2 = "Bonsoir";

}


Ce qui me permet de pouvoir faire un truc du genre

MesConstantes.Const1 au lieu de devoir faire

MesConstantes const = new MesConstantes();
const.Const1;

J'en arrive à ma question quand meme :
quel est la répercution sur la mémoire de déclarer des vairables ou bojets de ma classe en static?
Est ce que le fait que cela soit static fait que cela est charger au démarrage?

Je me dis que cela est plus pratique d'un point de vue code, et que cela m'évite de déclarer une instance de ma classe à chaque fois, donc une économie de mémoire, mais j'ai peut etre tord

merci d'avance popur les réponses que vous m'apporterez

6 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
50
Je ne sais pas si c'est la meilleure solution mais c'est aussi ainsi que je procède :p
Par contre, si ce sont des constantes, je te conseille te les mettre en readonly pour éviter qu'une mauvaise modification se répercute sur toutes les classes qui les utilisent

 public static readonly string Const1 = "Bonjour";


a++
Mx
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
90
dans ce cas precis je verrais plutot du const
class MesConstantes
{
public const string Const1 = "Bonjour";
public const string Const2 = "Bonsoir";

}


PS : remplace les <> par ] pour la balise Code :)

Cocoricoooooooo !!!!
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
public static readonly string Const1 = "Bonjour";


Dommage ca aurait été une idée pas trop mauvaise :)

Mais le mot const existe depuis des lustres en programmation

::|The S@ib|::
MVP C#.NET
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
50
Oui tu as raison ;)

Il faut préciser que le readonly permet de ne pas déclarer la valeur immédiatement, contrairement au const.
Mais j'ai donné cet exemple parce qu'a la base du topic, on parlait de variables static, et qu'on ne peut pas déclarer de "static const".

Mais aprés tout, oui, pourquoi le pas utiliser de simples constantes plutot que des variables static !

a++
Mx
Messages postés
346
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
3 septembre 2007
3
Bon alors voila le petit résumé de fin(peut etre),
En effet avec const ( public const string Const1...), ca fonctionnne correctement.
En fait, bon, je connaissais déjà le const mais je l'avais mis la ou il ne le faut pas , je m'explique

Le const a l'air de marcher sur tout ce qui type de base ( string, int,...) ou alors instance déjà créée.
Mon problème est que j'avais essayé le const sur une affectation avec new, sur des objets que j'ai créé, du coups affectation, et erreur car non constant :

génére une erreur :
public const MesMessages  mess1 = new MesMessages("balbalb", type.erreur);


ca marche
public static readonly MesMessages  mess1 = new MesMessages("balbalb", type.erreur);


merci pour vos réponses,
et si j'ai encore dit une connerie sur ce message, hésitez pas
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
90
oui, les seuls types reference utilisables avec const sont string et null

Cocoricoooooooo !!!!