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 :

Héritage : changer le type de retour d'une implémentation de fonction


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Par défaut Héritage : changer le type de retour d'une implémentation de fonction
    Bonjour à tous,

    Je voulais forcer les classes qui héritent d'une classe que j'ai créée à implémenter une fonction. J'ai donc créé une fonction abstraite dans ma classe de base.
    Le problème c'est que je ne sais pas exactement de quel type sera le type de retour de cette fonction.
    J'avais donc mis object comme type de retour mais, lors de l'implémentation, je suis donc également obligé de retourner le type object.

    Comment contourner cette limitation ou quel design dois-je utiliser pour arriver à ce résultat?

    Merci d'avance,
    Nicolas

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par NicolasJolet Voir le message
    Bonjour à tous,

    Je voulais forcer les classes qui héritent d'une classe que j'ai créée à implémenter une fonction. J'ai donc créé une fonction abstraite dans ma classe de base.
    Le problème c'est que je ne sais pas exactement de quel type sera le type de retour de cette fonction.
    J'avais donc mis object comme type de retour mais, lors de l'implémentation, je suis donc également obligé de retourner le type object.

    Comment contourner cette limitation ou quel design dois-je utiliser pour arriver à ce résultat?

    Merci d'avance,
    Nicolas
    Une méthode générique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public abstract T MyMethod<T>();

  3. #3
    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
    Pour construire une méthode qui renvois un type générique, qui n'est spécifié que par la classe fille, il n'y a que les methodes génériques de correct.

    En ADA, un langage non objet (avant ADA95) des années 8 0 c'était déjà possible
    Langage typée fort, avec déjà la généricité, c'est assez puissant, mais aujourd'hui le langage n'a plus aucun intérêt.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Par défaut
    Les méthodes génériques sont en effet une solution mais pas des plus élégantes à mon sens. Ça ne me plait pas trop de devoir indiquer quel type je choisi à chaque fois que j'appelle ma fonction.
    J'aurais voulu faire quelque chose du genre : définir une fonction générique dans ma classe de base et indiquer le type que je souhaite utiliser dans ma classe héritante.

    EDIT : mais je n'ai peut-être pas compris exactement comment définir le type dans ma classe fille?!

  5. #5
    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
    Tu peux faire une méthode générique qui prend un type T et renvois un type T (T pour Type façon d'indiquer que c'est gnérique).

    Puis une méthode qui prend un string et renvois un string. Cette méthode ce charge d'appeler la générique.

    De cette manière tu n'as plus besoin d'appeler le type, et en plus ta méthode peu s'amuser à faire des controleurs du au type choisie avant et apres appel de la générique.

    Cela pourrait être pratique lorsque ton type est une classe que tu as créé.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Par défaut
    Si j'ai bien compris la solution que tu proposes, ça ne règle pas totalement mon problème.
    Sachant que je dois implémenter ma classe abstraite, c'est un peu de la redondance si je dois à chaque fois créer une fonction pour encapsuler l'utilisation de ma fonction générique...

    EDIT : ce message était pour ced600

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Par défaut
    Avec une classe générique ça fonctionne effectivement bien

    Je n'ai qu'un seul problème : dans mon application utilisant mes classes, je souhaitais utiliser un tableau du type de ma classe de base, qui contiendrait en fait des objets du type des classes dérivées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cBase[] tab;
    foreach(cBase c in tab)...
    Maintenant que j'ai déclaré une classe générique pour la classe de base, il me demande d'expliciter le type à utiliser pour chaque utilisation du nom de ma classe de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cBase<type>[] tab;
    foreach(cBase<type> c in tab)...
    Un peu contraignant :\

    Comment puis-je faire?

    Merci pour tous vos conseils.

  8. #8
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par NicolasJolet Voir le message
    Les méthodes génériques sont en effet une solution mais pas des plus élégantes à mon sens. Ça ne me plait pas trop de devoir indiquer quel type je choisi à chaque fois que j'appelle ma fonction.
    Pas la peine, si tu fais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    abstract class Mere<T>
    {
        // des trucs
        public abstract T F();
        // d'autres trucs
    }
     
    class Fille : Mere<int>
    {
       public int F() { ... }
    }
    Tu pourras appeler F directement sur ta classe fille. ca dépend de ton scénario, mais si tu veux que la fonction F de la classe fille renvoie systématiquement un objet d'un type donné, ça me parait pas mal.

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

Discussions similaires

  1. [PL/SQL] type de retour d'une fonction
    Par foffffa dans le forum SQL
    Réponses: 4
    Dernier message: 27/03/2008, 15h06
  2. Réponses: 3
    Dernier message: 07/02/2006, 13h26
  3. [Oracle 9.1] Types de retour d'une fonction PL/SQL
    Par ftrifiro dans le forum PL/SQL
    Réponses: 8
    Dernier message: 12/10/2005, 16h54
  4. [surcharge]changer le type de reotour d'une méthode
    Par bountykiller dans le forum C++
    Réponses: 3
    Dernier message: 28/09/2005, 11h41
  5. [type de retour dans une proc]
    Par viny dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 19/03/2005, 14h35

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