C# cast d'un objet en interface
Répondre à la discussion
Affichage des résultats 1 à 1 sur 1

C# cast d'un objet en interface



  1. #1
    Tryph

    C# cast d'un objet en interface


    ------

    Bonjour,

    je me remets au C# après 2 ans d'abandon et je tombe sur un problème qui me fait caler:
    j'ai "besoin" (il ne s'agit que d'une appli de test pour me remettre dans le bain) d'instancier un objet dont le type est fourni dans un fichier de configuration, dans le but de faire une architecture modulaire et modifiable sans recompilation...

    bref...
    - j'ai une interface très simple DicesSim.UI.IUsable
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace DicesSim.UI
    {
        interface IUsable
        {
            void show();
        }
    }
    - j'ai une classe pas bien plus compliquée DicesSim.UI.DicesConsole qui implémente cette interface:
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace DicesSim.UI
    {
        public class DicesConsole : IUsable
        {
    ...
    le but est de pouvoir faire différentes interfaces utilisateur parmi lesquelles on puisse choisir simplement en précisant laquelle on veut utiliser dans un fichier de config.

    j'ai veux donc créer une instance de la classe dans le nom est indiquée dans le fichier de config sous forme de chaine et caster cette instance en IUsable pour utiliser indifféremment toute classe implémentant mon interface IUsable.
    pour ça:
    - je déclare une variable _UI de type IUsable dans une autre classe pour référencer l'instance de l'interface utilisateur et je l'initialise à null.
    - je créée l'instance de la classe voulue par
    Code:
    this._UI = (IUsable)Activator.CreateInstance(type);
    type contient un object Type pointant la classe type contient un object Type pointant la classe DicesSim.UI.DicesConsole et si je regarde au debugger, l'instruction Activator.CreateInstance(type) est évaluée comme object {DicesSim.UI.DicesConsole}.
    seulement voila, bien que DicesConsole implemente IUsable, le cast me lève une exception:
    Citation Envoyé par VC# Express
    Impossible d'effectuer un cast d'un objet de type 'DicesSim.UI.DicesConsole' en type 'DicesSim.UI.IUsable'.
    en cherchant un peu, j'ai lu que cela pouvait venir du fait que l'interface et la classe qui l'implémente n'étaient pas dans le même assembly, ce qui était effectivement le cas chez moi. mais j'ai testé de copier l'interface directement dans le projet ou elle est utilisée et ça ne fonctionne pas mieux.

    je me demande donc si quelqu'un peut m'expliquer comment caster un objet en une interface implémentée par son type, ou a défaut de m'indiquer une autre façon d'instancier un objet à partir d'une chaine de caractère contenant son type, ou plus largement une manière de choisir par fichier de config quelle classe utiliser pour une tache donnée.

    merci de m'avoir lu, a+

    -----
    Dernière modification par Tryph ; 17/02/2012 à 12h02.

Discussions similaires

  1. cast d'un pointer sur une fonction membre
    Par klark dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 13/09/2011, 17h17
  2. [Biochimie] Cast
    Par invite7ea9f5b9 dans le forum Biologie
    Réponses: 0
    Dernier message: 26/05/2011, 08h35
  3. Cast sur C18
    Par thundertom dans le forum Électronique
    Réponses: 7
    Dernier message: 29/08/2010, 16h46
  4. Rotation d'un objet dans un repère autour d'un axe de cet objet
    Par invite8001d615 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 03/05/2009, 14h21