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

NHenry 14274 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 30 avril 2014 à 10:17 - Dernière réponse : NHenry 14274 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention
- 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"
Afficher la suite 

Votre réponse

4 réponses

Whismeril 12117 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 30 avril 2014 à 10:40
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 14274 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 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 ?
Whismeril 12117 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 30 avril 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.
NHenry 14274 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 18 octobre 2018 Dernière intervention - 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.
Commenter la réponse de Whismeril

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.