Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

cast d'un objet vers une structure...

1 réponse
Avatar
Eric bouxirot
bonjour,

je voudrais faire une operation de "cast" qui visiblement me semble si
compliquée en .NET alors qu'en code non managé...no problemo

j'explique:
j'ai une appli basé sur des plugins en VB.NET, tout fonctionne
parfaitement.
sauf que pour eviter au maximum de modifier l'interface, je voudrait
definir une fonction un peu generique comme suit :

Public Function Host_GetObject(ByVal FonctionName As String,
Optional ByVal Parameters() As Object = Nothing) As Object() Implements
ENPI.Interfaces.IHost.Host_GetObject

en fait la fonction prends en entrée un nom de "fonctionnalité" et un
tableau d'objets pour des eventuels parametres.
la fonction traite ensuite avec un select case suivant "fonctionName"
et retourne un tableau d'objets en correspondance.

donc j'ai mis cette fonction dans mon interface. jusque la pas de
soucis.
si je la fait fonctionner avec des objets de type du framework, no
soucis..

par contre maintenant je voudrais que ma fonction retourne (dans le
tableau d'objet) une structure de données comme celle la (pas une
classe, juste une simple structure de données)

Private Structure StrPIsName
Friend PIName As String
Friend PIAssyName As String
End Structure

bon la ca se gate....
pas de probleme au niveau de l'emeteur de la structure, je peux bien
convertir mon arraylist de StrPIsName en tableau d'objets.

par contre à l'arrivée, je recoi donc mon tableau d'objet, typé en
appliprincipale.StrPIsName jusque la c'est normal.

sauf que moi, pour les raisons citées plus haut, je ne veux pas mettre
la structure dans mon interface, car a chaque nouvelle structure, je
devrai recompiler la totalité de mes plugins, ce qui peut tres
rapidement devenir chiant !

donc etant donnée que depuis mon plugin, je n'ai pas de reference vers
appliprincipale.StrPIsName, et bien je ne peux pas le caster vers une
structure ayant la meme... structure... mais déclarée dans mon
plugin...

me fais-je bien comprendre ?

le but etant de pouvoir faire evoluer, l'appli principale et de
nouveaux plugins, SANS modifier l'interface et donc pas etre obligé de
tout recompiler systématiquement...

je ne souhaite pas non plus avoir 45 DLLs annexes juste pour faire des
interfaces specifiques avec certains plugins..

en gros je cherche un moyen (peut etre degueulasse en .NET) qui
permettrai de faire un cast un peu "bourrin" comme en C.

toto = (moncast) tata;

a moins qu'il y ai une super solution propre en .NET.... mais je
commence a douter..

HELPPP !!

1 réponse

Avatar
Patrice
Pas très clair, mais j'aurais plutôt tendance à mettre dans l'interface une
méthode permettant d'énumérer les propriétés (je crois comprendre que le
problème est que l'on veut récupérer des infos qui pourront être enrichies
plus tard), voire si on veut une flexibilité totale, à afficher carrément la
couleur en faisant du late binding, plutôt que d'utiliser des interfaces qui
finalement ne définissent pas grand chose comme contrat...

Une autre approche serait sans doute de créer plusieurs interfaces (et d'en
créer de nouvelles si enrichissement) ce qui permet :
- à chaque plug-in d'implenter seulement la ou les interfaces qui
l'intéresse
- de pouvoir faire évoluer ces interfaces sans avoir pour autant à
recompiler le code des plug-ins
- préserve tout de même un contrat clair entre les plug-ins et l'application

--
Patrice

"Eric bouxirot" a écrit dans le message de news:

bonjour,

je voudrais faire une operation de "cast" qui visiblement me semble si
compliquée en .NET alors qu'en code non managé...no problemo

j'explique:
j'ai une appli basé sur des plugins en VB.NET, tout fonctionne
parfaitement.
sauf que pour eviter au maximum de modifier l'interface, je voudrait
definir une fonction un peu generique comme suit :

Public Function Host_GetObject(ByVal FonctionName As String, Optional
ByVal Parameters() As Object = Nothing) As Object() Implements
ENPI.Interfaces.IHost.Host_GetObject

en fait la fonction prends en entrée un nom de "fonctionnalité" et un
tableau d'objets pour des eventuels parametres.
la fonction traite ensuite avec un select case suivant "fonctionName" et
retourne un tableau d'objets en correspondance.

donc j'ai mis cette fonction dans mon interface. jusque la pas de soucis.
si je la fait fonctionner avec des objets de type du framework, no
soucis..

par contre maintenant je voudrais que ma fonction retourne (dans le
tableau d'objet) une structure de données comme celle la (pas une classe,
juste une simple structure de données)

Private Structure StrPIsName
Friend PIName As String
Friend PIAssyName As String
End Structure

bon la ca se gate....
pas de probleme au niveau de l'emeteur de la structure, je peux bien
convertir mon arraylist de StrPIsName en tableau d'objets.

par contre à l'arrivée, je recoi donc mon tableau d'objet, typé en
appliprincipale.StrPIsName jusque la c'est normal.

sauf que moi, pour les raisons citées plus haut, je ne veux pas mettre la
structure dans mon interface, car a chaque nouvelle structure, je devrai
recompiler la totalité de mes plugins, ce qui peut tres rapidement devenir
chiant !

donc etant donnée que depuis mon plugin, je n'ai pas de reference vers
appliprincipale.StrPIsName, et bien je ne peux pas le caster vers une
structure ayant la meme... structure... mais déclarée dans mon plugin...

me fais-je bien comprendre ?

le but etant de pouvoir faire evoluer, l'appli principale et de nouveaux
plugins, SANS modifier l'interface et donc pas etre obligé de tout
recompiler systématiquement...

je ne souhaite pas non plus avoir 45 DLLs annexes juste pour faire des
interfaces specifiques avec certains plugins..

en gros je cherche un moyen (peut etre degueulasse en .NET) qui permettrai
de faire un cast un peu "bourrin" comme en C.

toto = (moncast) tata;

a moins qu'il y ai une super solution propre en .NET.... mais je commence
a douter..

HELPPP !!