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 :

Fonction abstraite, généricité, spécialisation des paramètres...


Sujet :

C#

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Fonction abstraite, généricité, spécialisation des paramètres...
    Bonjour,

    Disons que j'ai la bête arborescence suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class A
    {
        abstract void maFonction(...);
    }
     
    class B : A
    {
        override void maFonction(Y param);
    }
     
    class C : A
    {
        override void maFonction(Z param);
    }
    Les classes Y et Z dérivent toutes deux de X.

    Comment exprimer que B et C doivent toues deux implémenter une fonction qui prend un paramètre dérivant de X, mais dont le type diffère en fonction de la classe implémentant la fonction ?

    Merci.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Bah c'est pas possible! Pour faire un override, il faut la même signature...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Et avec la généricité, en posant une contrainte ?

  4. #4
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Pourquoi tu ne veut pas mettre d'interface ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Ça change quoi à mon problème ?

  6. #6
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Effectivement j'ai mal lu.
    Soit tu laisse X et tu castes dans la fonction (mais c'est pas bien )

    Soit comme tu l'as dit, comme ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    abstract class A<T> where T : X
    {
          public abstract void MaFonction(T x);
    }
     
    class B : A<Y>
    {
        public override void MaFonction(Y x)
        {
            base.MaFonction(x);
        }
    }

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    J'ai appliqué la généricité aux fonctions plutôt qu'aux classes, mais étrangement, si je tape ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void maFonction<>(Y param);
    Je n'arrive donc pas à spécialiser, car Visual râle au niveau des chevrons (apparemment, il considère Y comme un type générique, et le veut également entre les chevrons).

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Bon, ben ce n'est pas la joie :

    http://msdn.microsoft.com/fr-fr/library/c6cyy67b.aspx

    Apparemment, je ne peux pas faire ce que j'aurais fait en C++.

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par oodini Voir le message
    J'ai appliqué la généricité aux fonctions plutôt qu'aux classes, mais étrangement, si je tape ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void maFonction<>(Y param);
    Je n'arrive donc pas à spécialiser, car Visual râle au niveau des chevrons (apparemment, il considère Y comme un type générique, et le veut également entre les chevrons).
    Il ne considère rien du tout, il ne veut pas d'une syntaxe invalide.
    Dans la mesure où Y est un type générique résolu au niveau de la compilation, je ne vois pas ce qu'il y a d'étonnant à cela.

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par oodini Voir le message
    Apparemment, je ne peux pas faire ce que j'aurais fait en C++.
    C'est hautement probable : on a jamais dit qu'il fallait appliquer les solution du C++ au C# (et inversement d'ailleurs).

    La litanie des langages C++, Java, C# a certes des point communs, mais il n'y a pas lieu de transposer une utilisaiton d'un concept de l'un vers l'autre. (et c'est particulièrement vrai pour les génériques/template pour lequel chacun de ces langages a une vision spécifique).

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Ben désolé, mais il me semble normal que nos réflexes de conception soient influencés par les langages que l'on maîtrise...

Discussions similaires

  1. Fonctions void pour modifier des paramètres
    Par shtroumpf_a_lunettes dans le forum Débuter
    Réponses: 15
    Dernier message: 16/04/2012, 21h37
  2. Réponses: 17
    Dernier message: 14/03/2012, 17h55
  3. Evaluations des paramètres d'une fonction
    Par WebPac dans le forum Langage
    Réponses: 15
    Dernier message: 06/10/2005, 09h46
  4. Réponses: 6
    Dernier message: 24/02/2005, 09h44
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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