Instancier des objets dans un tableau [Résolu]

LordOfTheShadow 175 Messages postés vendredi 22 décembre 2000Date d'inscription 9 septembre 2010 Dernière intervention - 27 mai 2009 à 09:32 - Dernière réponse : LordOfTheShadow 175 Messages postés vendredi 22 décembre 2000Date d'inscription 9 septembre 2010 Dernière intervention
- 27 mai 2009 à 11:44
Bonjour!

Je voudrai savoir si j'alloue de la mémoire aux céllules d'un tableau dont la valeur est null. Voir l'exemple ci-dessous. Et puis comment vider la mémoire des céllules instanciées(les objets du tableau sur lesquels j'ai fait un new...).

private void Form1_Load(object sender, EventArgs e)
{
tab = new Toto[5000];

tab[2] = new Toto();
tab[2].Val1 = 48;
tab[2].Val2 = 53;

tab[3] = new Toto();
}

private void button1_Click(object sender, EventArgs e)
{
label1.Text = tab[4].Val1.ToString();
}
Afficher la suite 

2 réponses

Répondre au sujet
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 27 mai 2009 à 10:13
+3
Utile
Salut

Je suis pas certain d'avoir bien compris ta première question.
Je te fais tout de même quelques rappels sur les tableaux :
Déjà, tout dépend du type de variables contenues dans le tableau

Par valeur (int, char...)
Le tableau alloue de la mémoire pour n variables (n étant la taille du tableau). Toutes ces variables sont initialisées à 0, et peuvent être directement utilisées :
int[] tab = new int[1];
int val = tab[0] + 5;

Par référence (Presque tous les types non primitifs, classes persos...)
La tableau alloue de la mémoire pour n références (pas pour les objets). Toutes ces références sont initialisées à null. Il faut forcément faire des new pour les utiliser :
object[] tab = new object[1];
string val = tab[0].ToString(); // NullReferenceException
tab[0] = new object();
string val = tab[0].ToString(); // Fonctionne

En ce qui concerne la mémoire, ce n'est pas toi qui la gère en C#, mais le Garbage Collector (GC). Pour simplifier, quand ton programme ne peut plus accéder à un objet (car cet objet n'a plus de référence), le GC se chargera de libérer la mémoire (cependant, tu ne sais pas trop quand). Il n'existe pas de "delete", de "free" ou d'équivalent en C#.
object o = new object(); // Allocation de mémoire
o = null; // Plus de référence sur l'objet créé, donc il sera supprimé automatiquement.

Pour plus d'infos sur le GC, si tu n'es pas anglophobe, tu peux regarder ici : http://msdn.microsoft.com/en-us/magazine/bb985010.aspx.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de krimog
LordOfTheShadow 175 Messages postés vendredi 22 décembre 2000Date d'inscription 9 septembre 2010 Dernière intervention - 27 mai 2009 à 11:44
0
Utile
Merci krimog you succeded to teach me how to handle the GC. :-))
Commenter la réponse de LordOfTheShadow

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.