Faire une propriété avec des paramètres

Résolu
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - Modifié par NHenry le 30/04/2014 à 10:28
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 30 avril 2014 à 22:38
Bonjour,

Après quelques recherches sur le net, je n'ai pas trouvé comment faire aussi simplement qu'en VB.

En VB, il est facilement possible de faire une propriété avec des paramètres :
Property MaPropriete(pParametre as Integer) as Double
    Get
        Return MonCodeDeCalcul(pParametre)
    End Get
    Set(pValue as Double)
        MonCode2(pValue)
    End Set
End Property

(Code tapé en direct pour l'exemple)

Je n'ai pas trouvé d'équivalent en C# simple à faire, le seul moyen que j'ai trouvé serait de faire une classe par propriété et à utiliser l'indexeur pour faire paramètre (je peux aussi avoir plusieurs paramètres pour une même propriété).

Exemple de code trouvé ailleurs sur le web :
// MyClass est une sous classe destinée à rendre la propriété indexable
class X
{
   public MyClass Strings = new MyClass();
}

//Un peu plus loin dans le code
X x = new X();

x.Strings[2] = "...";


Hors, mon code exécute un calcul pour chaque propriété et j'aimerai éviter de devoir créer plus de 10 classes supplémentaires uniquement pour faire mes traitements (conversions de type à partir d'un tableau de UInt16, pour du Modbus (UInt16 -> {UI8(2prm), I8(2prm), I16, UI32, I31, UI64, I64, F32, F64, String(2prm), ...}).

Auriez-vous une solution plus abordable et non aussi couteuse en classe supplémentaire ?
(Je préférerais utiliser une propriété pour faciliter les assignations/lectures)

Merci d'avance.

If a Dalek is a being of pure hate...what happens when Cadence uses her love spell on one?
En VB.NET pensez à activer "Option Explicit" et "Option Strict"

1 réponse

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
30 avril 2014 à 10:40
Bonjour,

je viens d'essayer avec un traducteur qui me répond ceci:
//ORIGINAL LINE: Property MaPropriete(pParametre as Integer) as Double
//INSTANT C# NOTE: C# does not support parameterized properties - the following property has been divided into two methods:
public double get_MaPropriete(int pParametre)
{
	return MonCodeDeCalcul(pParametre);
}
public void set_MaPropriete(int pParametre, double pValue)
{
	MonCode2(pValue);
}


Un autre:
An error occured converting your code, probably due to a syntax error:
-- line 1 col 1: EOF expected


Bon ces outils ne sont pas parfaits, mais c'est une syntaxe que je ne pense jamais avoir vu.

0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
30 avril 2014 à 10:54
Je viens de tester, cela me donne une fonction par accesseur (donc 2 (lecteur/écriture) par propriété ), j'aurais aimé pour voir faire comme avec VB.

Je pars d'un principe simple, si VB le propose c'est qu'il y a quand même une utilité.

"c'est une syntaxe que je ne pense jamais avoir vu"
Tu parles de mon code ou de la syntaxe proposée par le convertisseur ?
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
Modifié par Whismeril le 30/04/2014 à 17:18
Je connais (hors ce cas) un opérateur existant en VB qui n'a pas d'équivalent en C#, c'est Like.

"c'est une syntaxe que je ne pense jamais avoir vu"
Tu parles de mon code ou de la syntaxe proposée par le convertisseur ?
en fait, le principe même, la propriété avec paramètres, en C# je ne connais pas.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
30 avril 2014 à 22:38
D'accord, merci pour la réponse, dommage, c'était pratique en VB pourtant.

Je laisse ouvert jusqu'à Lundi, au cas où une personne aurait une proposition à faire.
0
Rejoignez-nous