Faire une propriété avec des paramètres [Résolu]

Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
-
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"
Afficher la suite 

1 réponse

Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
295
0
Merci
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.

NHenry
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
133 -
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 ?
Whismeril
Messages postés
13609
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 août 2019
295 -
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.
NHenry
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
133 -
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.
Commenter la réponse de Whismeril