OVH Cloud OVH Cloud

Comment on fait une indirection en CSharp ?

3 réponses
Avatar
okpwal
Bonjour,
Quelque par dans mon code
//dans une liste je récupère l'état sélectionné
string monEtat = listBox900sEtats.SelectedValue.ToString();
//je voudrais instancier cet état pour obtenir l'équivalent suivant
//EtatCReport101eFiche crEtat = new EtatCReport101eFiche();
//soit le mauvais code suivant !!!!
{monEtat} crEtat = new {monEtat}();

Quelqu'un a-t-il une idée sur la façon de faire cette indirection ?
ce qui m'éviterait de passer par des tests du genre
switch(monEtat)
{
case "EtatCReport101eFiche" :
EtatCReport101eFiche crEtat = new EtatCReport101eFiche();
break;
---
}
G.


--
okpwal
la perdrix !

3 réponses

Avatar
Gilles TOURREAU
okpwal avait soumis l'idée :
Bonjour,
Quelque par dans mon code
//dans une liste je récupère l'état sélectionné
string monEtat = listBox900sEtats.SelectedValue.ToString();
//je voudrais instancier cet état pour obtenir l'équivalent suivant
//EtatCReport101eFiche crEtat = new EtatCReport101eFiche();
//soit le mauvais code suivant !!!!
{monEtat} crEtat = new {monEtat}();

Quelqu'un a-t-il une idée sur la façon de faire cette indirection ?
ce qui m'éviterait de passer par des tests du genre
switch(monEtat)
{
case "EtatCReport101eFiche" :
EtatCReport101eFiche crEtat = new EtatCReport101eFiche();
break;
---
}
G.



Tiens... un Windevien dans un forum C# ! Je me sens moins seul ! ;-)

Il faut pour faire çà utiliser la "Reflection" (System.Reflection)

Par exemple (La syntaxe est de la peu près...) :

Type t;
ConstructorInfo c;

//On recherche la classe qui s'appelle monEtat (Je crois qu'il faut
donner le nom de la classe complète : assembly + classe.)

t = Type.GetType(monEtat);

//On recherche le constructeur
c = t.GetConstructor(null);

//On appelle le constructeur
Object o = c.Invoke(les_paramètres);

Note : Il est impossible de faire une idirection sur les déclaration de
type de variables

{monEtat} crEtat <--- Impossible !

Il faut utiliser une classe commune à tous les états (J'ai pris
"object" mais l'idéal est de prendre la classe de base de tous les
états Crystal Report...)

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
okpwal
> okpwal avait soumis l'idée :
Bonjour,
Quelque par dans mon code
//dans une liste je récupère l'état sélectionné
string monEtat = listBox900sEtats.SelectedValue.ToString();
//je voudrais instancier cet état pour obtenir l'équivalent suivant
//EtatCReport101eFiche crEtat = new EtatCReport101eFiche();
//soit le mauvais code suivant !!!!
{monEtat} crEtat = new {monEtat}();

Quelqu'un a-t-il une idée sur la façon de faire cette indirection ?
ce qui m'éviterait de passer par des tests du genre
switch(monEtat)
{
case "EtatCReport101eFiche" :
EtatCReport101eFiche crEtat = new EtatCReport101eFiche();
break;
---
}
G.



Tiens... un Windevien dans un forum C# ! Je me sens moins seul ! ;-)

Il faut pour faire çà utiliser la "Reflection" (System.Reflection)

Par exemple (La syntaxe est de la peu près...) :

Type t;
ConstructorInfo c;

//On recherche la classe qui s'appelle monEtat (Je crois qu'il faut donner le
nom de la classe complète : assembly + classe.)

t = Type.GetType(monEtat);

//On recherche le constructeur
c = t.GetConstructor(null);

//On appelle le constructeur
Object o = c.Invoke(les_paramètres);

Note : Il est impossible de faire une idirection sur les déclaration de type
de variables

{monEtat} crEtat <--- Impossible !

Il faut utiliser une classe commune à tous les états (J'ai pris "object" mais
l'idéal est de prendre la classe de base de tous les états Crystal Report...)

Cordialement



Ca y est, je suis démasqué !
Effectivement je peine à trouver des équivalents à certaines idées très
pratiques de WinDev. Incontestablement la Reflexion est très puissante,
mais hélas aussi très complexe. Bon je m'y mets, et merci.

--
okpwal
la perdrix !
Avatar
Gilles TOURREAU
okpwal avait soumis l'idée :
okpwal avait soumis l'idée :
Bonjour,
Quelque par dans mon code
//dans une liste je récupère l'état sélectionné
string monEtat = listBox900sEtats.SelectedValue.ToString();
//je voudrais instancier cet état pour obtenir l'équivalent suivant
//EtatCReport101eFiche crEtat = new EtatCReport101eFiche();
//soit le mauvais code suivant !!!!
{monEtat} crEtat = new {monEtat}();

Quelqu'un a-t-il une idée sur la façon de faire cette indirection ?
ce qui m'éviterait de passer par des tests du genre
switch(monEtat)
{
case "EtatCReport101eFiche" :
EtatCReport101eFiche crEtat = new EtatCReport101eFiche();
break;
---
}
G.



Tiens... un Windevien dans un forum C# ! Je me sens moins seul ! ;-)

Il faut pour faire çà utiliser la "Reflection" (System.Reflection)

Par exemple (La syntaxe est de la peu près...) :

Type t;
ConstructorInfo c;

//On recherche la classe qui s'appelle monEtat (Je crois qu'il faut donner
le nom de la classe complète : assembly + classe.)

t = Type.GetType(monEtat);

//On recherche le constructeur
c = t.GetConstructor(null);

//On appelle le constructeur
Object o = c.Invoke(les_paramètres);

Note : Il est impossible de faire une idirection sur les déclaration de
type de variables

{monEtat} crEtat <--- Impossible !

Il faut utiliser une classe commune à tous les états (J'ai pris "object"
mais l'idéal est de prendre la classe de base de tous les états Crystal
Report...)

Cordialement



Ca y est, je suis démasqué !
Effectivement je peine à trouver des équivalents à certaines idées très
pratiques de WinDev. Incontestablement la Reflexion est très puissante, mais
hélas aussi très complexe. Bon je m'y mets, et merci.




Je voulais juste te dire que nous sommes actuellement en train de
migrer toutes nos applications Windev sous .NET, donc si tu as des
questions a propos d’équivalence entre une fonction du W-Langage et
.NET, n’hésites pas à me contacter !


Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr