Propriété avec arguments

Résolu
Signaler
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
-
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
-
Bonjour,

Petit problème, je n'arrive pas à faire ce que je veux faire: snif.
Aussi, c'est normal que je pose la question.

Le Problème:
J'ai un tableau de 'string'.
Pour accéder à ce tableau, je veux faire une propriété en Lecture seule qui renvoie un élément du tableau dont on aura précisé l'index. Cela pour pas que l'utilisateur puisse remplacer le tableau ou modifier les valeurs.

Je veux faire en gros:

protected internal string[] TabStr; // Le tableau
public string Str(int Index) // La propriété
{
get // L'erreur (; excepted)
{
return TabStr[Index];
}
}

Ici, le tableau n'est pas défini, donc il retournera une erreur comme quoi il n'est pas initialisé. Mais le problème majeur c'est comment faire la propriété.

J'arrive à faire des propriétés sans arguments mais avec, rien !!!
J'ai un peut tout essayer, je n'ai pas trouvé.
Mais est-ce possible ?

Je travaille sous vs2005.

Merci, d'avance.

Kenji

2 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Salut,

En C# nous n'avons pas de propriétés indexées.

Soit tu passes par un indexeur directement dans la classe, elle devient en gros une classe de collection :
protected internal string[] TabStr; // Le tableau
public string this[int Index]
{
get
{
return TabStr[Index];
}
}

A l'utilisation :
string str = instance[index];

Soit tu veux garder la propriété "nommée", et auquel cas tu codes une classe de collection ReadOnlyStringCollection pour pouvoir faire qqch de ce genre :
protected internal string[] TabStr;
protected internal ReadOnlyStringCollection _strings = null;
public string Str
{
get
{
if ( this._strings == null )
{
this._strings = new ReadOnlyStringCollection(
}
return this._strings;
}
}

Ainsi à l'utilisation tu pourras avoir ce code :
string str = instance.Str[index];

/*
coq
MVP Visual C#
*/
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Merci beaucoup coq, grâce à ca je vais pouvoir avancer mon prog.
La première solution me convient parfaitement.

Encore Merci.

Kenji