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

Framework .NET Discussion :

Reflection : Créer une instance sans appeler le constructeur


Sujet :

Framework .NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2002
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 104
    Points : 128
    Points
    128
    Par défaut Reflection : Créer une instance sans appeler le constructeur
    Bonjour tout le monde,

    Mon problème est dans le titre : je veux créer une instance d'un type sans appeler le constructeur.

    Il me semble que cela est possible depuis la version 2.0 du framework, mais pas moyen de remetre la main sur cette info ...

    Pour info, aucune méthode de la classe Activator ne marche, et les méthode d'Assembly ou AppDomain utilise les même méthode que Activator ...

    Bref je suis sûr de l'avoir vu quelque part, mais où ....

    Merci d'avance.

  2. #2
    Membre régulier Avatar de despeludo
    Inscrit en
    Janvier 2004
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 121
    Points : 83
    Points
    83
    Par défaut
    Je ne suis pas sûr de bien comprendre ta question. Que cherches-tu réellement à faire ?
    - Utiliser des methodes d'une classe sans appeler de constructeur (méthodes statiques) ?
    - Instancier un objet en utilisant la réflexion ?
    - Autres ?
    Un ordinateur fait ce qu'on lui demande, et c'est bien le problème.

  3. #3
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Peut être en chargeant l'assembly que pour de la reflection ... au moin là aucun code ne sera exécuté :
    http://msdn2.microsoft.com/en-us/library/0et80c7k.aspx

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Je doute que ce soit possible et en même temps, c'est normal. En effet, tu eux créer une instance d'un type donné. En .NET, créer une instance d'un type, tu dois passer par un constructeur, même si celui-ci est privé.

  5. #5
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Je doute que ce soit possible et en même temps, c'est normal. En effet, tu eux créer une instance d'un type donné. En .NET, créer une instance d'un type, tu dois passer par un constructeur, même si celui-ci est privé.
    Il existe un certain nombre de mécanismes qui créent un type sans appeler le constructeur.
    L'exemple le plus évident est sans doute le sérialiseur binaire, ce qui pourrait éventuellement s'expliquer par une implémentation particulière non dépendante des fonctionnalités du framework.
    En revanche, le serialiseur DataContract effectue bien une construction d'objet sans appel au constructeur, comme décrit sur la page du MSDN Using Data Contracts

    La construction d'un tel objet doit se faire par quelque chose comme ça : http://msdn2.microsoft.com/en-us/lib...zedobject.aspx

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2002
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 104
    Points : 128
    Points
    128
    Par défaut [Résolu] : Reflection : Créer une instance sans appeler le constructeur
    Bonjour à tous,

    Merci pour vos réponses !

    La méthode "FormatterServices.GetUninitializedObject" donne à peu près ce que je voulais.

    Je reste persuadé d'avoir vu dans un webcast une autre façon de faire, mais tant que ça marche ... ça marche

    Pour les explications (que je n'ai pas fournies au début ... ), je souhaite avoir un comportement analogue au designer de VS : alors ce n'est peut être pas la méthode utilisée dans VS, mais je pensais
    1/ Créer une instance.
    2/ Appeler une seule méthode d'initialisation (parmie d'autres)
    ==> Tester l'effet d'une méthode sur un objet (sachant que toutes les méthodes appelées dans le constructeur ne m'intéresse pas, que je ne peux/veux pas modifier le code, et qu'il n'y a pas de constructeur sans paramètre)

    Tout cela "automatiquement" sur pas mal de classe : donc "le banc de test d'objet" de VS 2005 ne m'intéresse pas trop

    Merci tout le monde

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Greybird Voir le message
    Il existe un certain nombre de mécanismes qui créent un type sans appeler le constructeur.
    L'exemple le plus évident est sans doute le sérialiseur binaire, ce qui pourrait éventuellement s'expliquer par une implémentation particulière non dépendante des fonctionnalités du framework.
    En revanche, le serialiseur DataContract effectue bien une construction d'objet sans appel au constructeur, comme décrit sur la page du MSDN Using Data Contracts

    La construction d'un tel objet doit se faire par quelque chose comme ça : http://msdn2.microsoft.com/en-us/lib...zedobject.aspx
    Certes, mais dans la plupart des cas ordinaires, il faut passer par un constructeur pour instancier un type: cela nous permet d'affecter les valeurs par défaut, etc...

  8. #8
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    ca ne correspondrait pas à cela:
    http://lgmorand.developpez.com/dotnet/framework2/#L2.4
    ?

    edit: bon ca correspond pas à ce que tu veux faire. j'ai rien dit
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  9. #9
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Certes, mais dans la plupart des cas ordinaires, il faut passer par un constructeur pour instancier un type: cela nous permet d'affecter les valeurs par défaut, etc...
    Je n'ai pas dit le contraire
    Je répondais juste à ton affirmation indiquant que la création d'un type imposait le passage dans un constructeur. En l'occurrence, c'est erroné, mais il est évident que passer outre les constructeurs ne doit se faire que dans des cas précis, et en maîtrisant parfaitement les conséquences.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Instancier une classe sans appeler son constructeur ?
    Par Maitre2B dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 15/11/2014, 16h38
  2. Réponses: 4
    Dernier message: 11/01/2012, 17h59
  3. Réponses: 5
    Dernier message: 17/07/2006, 18h34
  4. [Débutant] Créer une instance avec le nom d'une classe
    Par Quetzalcoatl dans le forum Langage
    Réponses: 7
    Dernier message: 23/01/2006, 20h43
  5. [VB.NET]Créer une instance par page
    Par Dnx dans le forum ASP.NET
    Réponses: 20
    Dernier message: 31/10/2005, 13h22

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