Voilà et cette façon de procéder ne fonctionne pas, le TabEVENTS[0].EventActionTab[0] = 10; plante à l'exécution avec ce message d'erreur : La référence d'objet n'est pas définie à une instance d'un objet.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 8 juil. 2010 à 11:16
Salut
Alors petite remarque pour commencer : il vaut mieux initialiser tes variables (ou tes tableaux) dans un constructeur. Ainsi, tu sais exactement à quel moment ils sont initialisés.
Sais-tu seulement à quoi sert le mot clé "static" ? Il sert à ce que ton membre sont accessible depuis la classe et non plus l'objet.
Donc pour résumer :
Dans ta structure, tu enlèves le mot-clé static, et tu enlèves l'initialisation de ton champ ActionTab
public struct EVENTStruct
{
public uint ID;
public bool Actif;
public uint NbInput;
public uint[] ActionTab;
}
Dans ta classe, tu enlèves les mots-clé static, tu ajoutes un constructeur, tu accèdes au bon champ (ActionTab, pas EventActionTab) et tu l'initialise.
class EVENT
{
public int NbrEventsMax;
public EVENTStruct[] TabEVENTS;
public EVENT()
{
NbrEventsMax = 16;
TabEVENTS = new EVENTStruct[NbrEventsMax];
}
public void EVENTSaveTab(Form1 Form1Param)
{
TabEVENTS[0].ActionTab = new uint[15];
TabEVENTS[0].ActionTab[0] = 10;
MessageBox.Show(TabEVENTS[0].ActionTab[0].ToString());
}
}
Tu peux, si tu préfères, déclarer NbrEventsMax comme une constante (mot clé const), et dans ce cas, lui fournir sa valeur dès sa déclaration et non dans le constructeur.
public const int NbrEventsMax = 16;
Attention également que donner un accès public à tes champs, ce n'est vraiment pas propre. Les propriétés sont là pour ça (Dans mon exemple, au moins, tu es sûr de ne pas pouvoir donner une valeur négative à "maVariable", sauf directement dans la classe dans laquelle maVariable se trouve) :
private int maVariable;
public int MaVariable
{
get
{
return maVariable;
}
set
{
if (value >0) maVariable value;
}
}
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 8 juil. 2010 à 19:36
Bonsoir
Excellente réponse de krimog :-)
Une question au passage, pourquoi une structure et pas une classe ?
n'oublions pas que les structures sont passées litéralement sur la pile, donc c'est plus lent et plus gourmant.
Si les structures sont passées d'une méthode à une autre, elles seront dupliquées, j'ai eu des stack overflow avec ces trucs.
L'idéal étant de les passer par référence, mais alors quel est leur interet par rapport à une classe?