IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[.NET 2.0] Reflexion en C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de OtI$
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 64
    Par défaut [.NET 2.0] Reflexion en C#
    Bonjour à tous!

    Je cherche à implémenter un algo utilisant la réflexion. Mon but est de "remplir" des objets à partir d'un tableau de bytes.
    Ex: j'ai une classe du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Toto{
      int champ1
      char champ2;
     
      void Toto() {}
    }
    Et un tableau de bytes représentant en mémoire la valeur d'un int et d'un char donc.

    J'aimerais, dynamiquement et en utilisant la réflexion, connaitre le type des champs de mon objet (ca j'y arrive), puis affecter un certain nombre de bytes issus du tableau aux champs (ca, je n'y arrive pas).

    Je pensais, en connaissant mon type, pouvoir en déduire le nombre de bytes à lire (style un int = 4 bytes).

    Je ne sais pas si je suis très compréhensible... si quelqu'un a compris ou veut plus d'explication, je reste dispo.

    Merci

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Je ne suis pas sur d'avoir tout compris, mais peut être que cela peut t'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int t = 0;
    Console.Writeline(t.GetTypeCode());
    Cela t'affiche Int32 et avec cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Int16 t = 0;
    Console.Writeline(t.GetTypeCode());
    Tu as Int16 d'affiché.

  3. #3
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Si tu connais le type et le nombre de bytes équivalent, il te suffit de faire un ReadBytes de la longueur voulue, puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string s = new string(resultatDuReadBytes);
    int i = Int32.Parse(s);
     
    typeof(Toto).GetProperty("propName").SetProperty(instanceDeToto, i);

  4. #4
    Membre confirmé Avatar de jerome.fortias
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 164
    Par défaut
    Pour ceux qui ne connaissent pas le concept de réflexion : http://fr.wikipedia.org/wiki/R%C3%A9..._(informatique)

    Dans notre cas il cherche à faire de l'introspection..

    Pourquoi ne pas utiliser les outils de sérialisation XML vers OBJ. En prérequis tu te fais un bout de code qui convertit ton tableau de byte en un XML local et hop tu utilises de standard .net de sérialisation....Cela constituerait une bonne base de départ. Aprés tu peux aller jouer du côté des interfaces et des classes virtuelles...

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par jerome.fortias Voir le message
    Pourquoi ne pas utiliser les outils de sérialisation XML vers OBJ.
    Pourquoi ? Ben euh parce que c'est sale !
    Tu veux convertir du binaire en XML pour le retransformer en objet, il n'y a rien qui te choque la dedans ?!
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  6. #6
    Membre confirmé Avatar de jerome.fortias
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 164
    Par défaut
    Franchement non. Si une transformation de bytes en XML permet d'utiliser un outil générique de .net qui en plus fonctionne bien... Perso je trouve cela efficace. Perso côté saleté y'a largement pire...

    Au passage je suis cette discussion car elle peut intéresser un des gars de mon équipe qui travaille pour l'instant avec des classes virtuelles et des activators. Une approche basé sur la réflexion me parait pas mal du tout et pourrait être une alternative "amusante".

    mais revenons au probleme initial :
    "J'aimerais, dynamiquement et en utilisant la réflexion, connaitre le type des champs de mon objet (ca j'y arrive), puis affecter un certain nombre de bytes issus du tableau aux champs (ca, je n'y arrive pas)."
    ... J'aimerais que le demandeur soit plus clair dans ce qu'il n'arrive pas à faire....exactement (morceaux de code par exemple)

  7. #7
    Membre confirmé Avatar de OtI$
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 64
    Par défaut
    Merci pour vos réponses.

    Le XML, il faut oublier dessuite, car j'utilise un mécanisme .NET Remoting et je ne pourrais pas passer de fichiers d'une machine à une autre.

    Mon problème, de manière plus globale, est le suivant. Je cherche un moyen pour faire cette chaine d'opérations:

    Code C++--> écrit des structures en mémoire dans un MMF
    Code C#--> vient lire mon MMF et extrait un tableau de bytes

    J'aimerais pouvoir retrouver mes structures (sous forme de classe par ex.) au sein de mon programme C#.

    C'est pourquoi je me suis penché sur l'introspection (d'ailleurs, je pensais que introspection == reflexion en C#??) mais sans succès. Je n'arrive pas à réorganiser mon byte[] dans différentes classes.

    PS: pour corser le tout, le code C++ écrit des structures "imbriquées" en mémoire, il serait donc fort génial de disposer d'un code récursif...

    Si quelqu'un a une idée de génie.. sinon je serais obligé de changer mon code C# en du code C++.

    Merci

Discussions similaires

  1. [Débat] Technologie .NET vs JAVA
    Par neo.51 dans le forum Débats sur le développement - Le Best Of
    Réponses: 1047
    Dernier message: 14/01/2019, 16h15
  2. A ceux qui ont migré de VB6 vers VB.Net
    Par Fox dans le forum VB 6 et antérieur
    Réponses: 81
    Dernier message: 21/05/2008, 14h56
  3. [VB.NET]Reflexion lister les membres d'une classe ...presque
    Par lucie.houel dans le forum ASP.NET
    Réponses: 19
    Dernier message: 20/09/2005, 13h49
  4. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  5. Fichier PDOXUSRS.NET
    Par yannick dans le forum Paradox
    Réponses: 5
    Dernier message: 05/04/2002, 09h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo