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 et typeof


Sujet :

C#

  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut héritage et typeof
    soir deux classes :
    et
    Comment fair pour que le test suivant laisse passer les type derivé de A ?
    en gros j aimerais un mot clé typeDerivedOf()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void fonction1(Type _t)
    {
        if (_t == typeof(A))
        {}
    }
    Pour les details, cherche tout seul !

  2. #2
    Membre actif Avatar de bartoumi
    Profil pro
    Inscrit en
    Février 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 178
    Points : 205
    Points
    205
    Par défaut
    tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void fonction1(Type _t)
    {
        if (_t in typeof(A))
        {}
    }
    I C#

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Ce que tu cherches est la méthode IsSubClassOf du type "Type".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (_t.IsSubClassOf(typeof(A)) {... }
    ಠ_ಠ

  4. #4
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    la methode de Guulh me semble bonne.

    Mais j aimerais savoir comment bartoumi a trouver sa methode qui compile pas d ailleurs
    Pour les details, cherche tout seul !

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par ZaaN Voir le message
    Mais j aimerais savoir comment bartoumi a trouver sa methode qui compile pas d ailleurs
    Nulle part, c'est le fruit de son imagination.

    Sinon, la méthode de Guulh est la bonne si tu veux tester le type. Si tu veux tester pour une instance tu peux utiliser is

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     class A
    {
    }
    class B : A
    {
    }
     
    B b;
    if(b is A) // Vrai
    {
     
    }
    A noter aussi que is peut être utilisé pour les interfaces.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  6. #6
    Membre actif Avatar de bartoumi
    Profil pro
    Inscrit en
    Février 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 178
    Points : 205
    Points
    205
    Par défaut
    J'utilise cette methode
    lorque j'ai developpez des composant button specifique qui herite tous de la classe Button
    donc pour savoir si il etiat de type Button j'ai fais ce que je t'avais montrer.

    J'ai pas le code avec moi
    mais des que je l'aurais je te le metterai en ligne.
    Merci
    I C#

  7. #7
    Membre actif Avatar de bartoumi
    Profil pro
    Inscrit en
    Février 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 178
    Points : 205
    Points
    205
    Par défaut
    Autant pour moi

    au lieu de in c'est is
    merci de prendre en compte
    I C#

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par bartoumi Voir le message
    Autant pour moi

    au lieu de in c'est is
    Sauf que is ne peut être utilisé que pour les instances (comme je le mentionne supra). Si il veut tester un type sans disposer d'instance, is ne marche pas. Plus vicieusement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(typeof(B) is A) // false !
    {
    }
    compile mais ne marche pas.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Ce qu'il me semble aussi, c'est qu'hormis un développement relativement avancé avec de la réflexion, génération de code dynamique, tout ça , je vois pas trop quel genre de fonction a besoin de prendre un type en paramètre. La framework a bien quelques fonctions comme ça, mais c'est juste pour des raisons historiques, puisque dans la plupart des cas un bon coup de Generics, avec des contraintes si nécessaire, suffit amplement. D'où le "is", concis est beaucoup utilisé, par oposition à ce IsSubClassOf tout moche.

    EDIT : orthographe.
    ಠ_ಠ

  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 : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Ce qu'il me semble aussi, c'est qu'hormis un développement relativement avancé avec de la réflexion, génération de code dynamique, tout ça , je vois pas trop que genre de fonction a besoinde prendre un type en paramètre.
    Les exemples sont multiples : par exemple, en UI, récupérer les tags correspondant aux items sélectionnés dans une ListView pour un type d'objet métier donné.
    Exemple très courant.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Les exemples sont multiples : par exemple, en UI, récupérer les tags correspondant aux items sélectionnés dans une ListView pour un type d'objet métier donné.
    Exemple très courant.
    J'ai du mal à voir. C'est vrai que les winforms étant faites comme elles le sont, c'est à dire sans Generics (pour faciliter le design, je suppose), elles n'ont pas profité de toutes avancées offertes par le FX 2.0. Mais quelle est la différence entre f(Type t, ...) et f<T>(...) ?
    ಠ_ಠ

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Guulh Voir le message
    J'ai du mal à voir. C'est vrai que les winforms étant faites comme elles le sont, c'est à dire sans Generics (pour faciliter le design, je suppose), elles n'ont pas profité de toutes avancées offertes par le FX 2.0. Mais quelle est la différence entre f(Type t, ...) et f<T>(...) ?
    Dans le deuxième cas, tu dois connaitre le type à la compilation; ce n'est pas toujours possible (imagine, tu fais sélectionner par l'utilisateur un type de BO donné, puis tu dois extraire une liste de BO en fonction du type sélectionné).

    Autre cas, pour tester la possibilité de drop sur un drag/drop, etc .....

    Bref, je ne connais pas de projet où il n'y a aucune méthode avec un paramètre Type.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Je comprends pas très bien ces arguments. pourquoi dis-tu que "tu dois connaitre le type à la compilation" ? Quelle différence entre ces deux fonctions ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public f(Type t, ...)
    {
    ...
    }
    publig g<T>(...)
    {
    Type t = typeof(t); // si on a vraiment besoin du type
    ...
    }
    Le C++ se dépatouille très bien sans pour autant avoir de classe "Type", non ? C'est pour ça qu'à part pour la réflexion, je vois pas très bien à quoi ça sert.
    ಠ_ಠ

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Un generics (son parametre donc) ne peut se comporter comme une variable. A la compilation, le type doit etre fermé (aka resolu), sinon ca ne marche pas.

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Le C++ se dépatouille très bien sans pour autant avoir de classe "Type", non ?
    Pas si bien que cela, justement.

    C'est pour ça qu'à part pour la réflexion, je vois pas très bien à quoi ça sert.
    Reprend mon exemple supra : une liste de BO dont les références sont mis dans les Tag d'une listview, ces BO pouvant être de différents type; puis de là extraction d'une liste typée de manière homogène. (je prends volontairement un exemple très simple).

    Sinon, concernant la compilation SirJulio t'a répondu.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Ok ok. Compris ! Merci à tous les deux, j'en apprends tous les jours
    ಠ_ಠ

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

Discussions similaires

  1. [Postgresql]Héritage
    Par lheureuxaurelie dans le forum PostgreSQL
    Réponses: 13
    Dernier message: 02/10/2008, 09h18
  2. [Héritage] Vos commentaires....
    Par Fyna dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 03/05/2005, 22h10
  3. [XML Schemas]héritage multiple
    Par nicolas_jf dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 10/06/2003, 12h55
  4. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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