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 :

constructeur qui prend une interface (ou une classe abstraite) en argument


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Points : 53
    Points
    53
    Par défaut constructeur qui prend une interface (ou une classe abstraite) en argument
    bonjour, je débute le c#, et je me retrouve contraint d'utiliser une bibliothèque de référence (qui se présente à moi sous la forme de .dll et où les sources sont donc inaccessibles) très complète et très complexe. J'utilise MS Visual Studio.

    Mon but, c'est d'utiliser la classe CGG, qui est définie dans mes références, en tant que classe dérivée de la classe GG, qui est une classe abstract.

    Le problème, c'est que le constructeur de CGG prend comme arguments :

    CGG ( GG g, Matrice M)

    Or, je ne peux pas du tout définir un membre de la classe GG puisque c'est une classe abstraite.

    Ce que je pense : en fait il doit y avoir d'autres classes dérivées de GG qui peuvent elles être définies dans le programme. Mais comment les trouver ?


    Devant l'impossibilité de résoudre ce problème, j'ai tenté de chercher d'autres facons de faire dans la pléthorique bibliothèque de références.
    Je suis alors tombé sur une classe UBGG qui est également dérivée de GG, et qui pourrait donc parfaitement rentrer dans mon constructeur de CGG.

    Malheureusement, l'argument du constructeur de cette classe est :

    UBGG(Iseq<double> g);

    Où Iseq est une Interface. Or, moi je croyais que les interfaces étaient des listes de méthodes à utiliser par des classes. Pas des trucs qui se mettent en argument dans des fonctions.

    Ce que je pense : Il "suffit" de trouver (ou de créer) une classe qui implémente l'interface Iseq, et je pourrai rentrer un membre de cette classe en argument. Là encore, je me pose la question : comment trouver dans ma liste de références ces classes magiques ?


    Merci de me dire si ce que je pense est vrai, ou si "mais non abruti tu n'as rien compris, on dirait que tu as appris le C# aujourd'hui"

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Citation Envoyé par Magemax Voir le message
    Ce que je pense : Il "suffit" de trouver (ou de créer) une classe qui implémente l'interface Iseq, et je pourrai rentrer un membre de cette classe en argument. Là encore, je me pose la question : comment trouver dans ma liste de références ces classes magiques ?
    On définit une interface en paramètre pour obliger l'utilisateur a passer en argument une classe qui implémente cette interface. La définition des classe permet de déterminer le niveau d'encapsulation, la classe dont elle hérite, le(s) interface(s) qu'elle implémente ainsi que d'autres infos...

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Le problème, c'est que le constructeur de CGG prend comme arguments :

    CGG ( GG g, Matrice M)

    Or, je ne peux pas du tout définir un membre de la classe GG puisque c'est une classe abstraite.
    Tu es sûr que c'est le seul constructeur disponible ? Tu peux vérifier avec l'explorateur d'objets de VS (ou avec Intellisense)

    Sinon, il existe peut-être une class factory (GGFactory ou quelque chose dans ce goût là) qui sert à créer des instances des classes héritées de GG.

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Points : 53
    Points
    53
    Par défaut
    C'est bien le seul constructeur disponible pour la classe CGG, mais peut être qu'il existe d'autres classes dérivées de GG.

    N'y a t-il pas moyen avec l'explorateur d'objets d'aller chercher les classes dérivées de GG ? (Je n'arrive qu'à remonter dans la hiérarchie i.e. à retrouver les objets dont sont dérivés les classes, mais pas à trouver les classes filles).

    Ou même les classes qui implémentent Iseq ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Magemax Voir le message
    C'est bien le seul constructeur disponible pour la classe CGG, mais peut être qu'il existe d'autres classes dérivées de GG.
    Pas non plus de méthode statique "Create" ou assimilée ?

    Citation Envoyé par Magemax Voir le message
    N'y a t-il pas moyen avec l'explorateur d'objets d'aller chercher les classes dérivées de GG ? (Je n'arrive qu'à remonter dans la hiérarchie i.e. à retrouver les objets dont sont dérivés les classes, mais pas à trouver les classes filles).
    Pas avec l'explorateur d'objet je pense... par contre tu peux faire une recherche avec la réflexion (ici en utilisant LINQ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Assembly asm = Assembly.GetAssembly(typeof(GG));
    IEnumerable<Type> derivedFromGG = from t in asm.GetTypes()
            where t.IsSubclassOf(typeof(GG))
            select t;
    foreach (Type t in derivedFromGG) Console.WriteLine(t.FullName);

Discussions similaires

  1. Colorer une ligne dans une image d'une interface
    Par yasmine2013 dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 27/05/2012, 22h32
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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