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 :

Typed Collection et Heritance


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut Typed Collection et Heritance
    Bonjour
    Si il y a des fous , qui se transforme en compilateur, je ne comprend pas pourquoi j'ai un implicite cast

    J'ai les classes suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public class ClientPresenter : MyBasePresenter<ClientModel, IClientView>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public MyBasePresenter<TModel, TView> : Architechture.BasePresenter<TModel, TView>
            where TModel: MyBaseModel, new()
            where TView : Architechture.IBaseView
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public class ClientModel : myBaseModel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public interface IClientView : Architechture.IBaseView
    Quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ClientPresenter clientPresenter; 
    myBasePresenter<MyBaseModel, Architechture.IBaseView> basePresenter;
    basePresenter = clientPresenter;
    J'ai un implicite cast et je ne vois pas pourquoi

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    sinon avec un truc plus simple peut-être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
        public interface IMyI
        {
        }
     
        class a : IMyI
        {
        }
     
       class myList : List<a>   {  }
     
     
        class Program
        {
            static void Main(string[] args)
            {
                List<IMyI> t;
                myList mylist;
                mylist = new myList();
                t = mylist;
     
            }
        }
    Logiquement t ne devrais pas pouvoir avoir un myList?

  3. #3
    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
    Vivivi, c'est ce qu'on appelle la covariance.
    On peut prendre l'exemple avec les List<T>:
    Même si String est un object, List<String> n'est pas une List<object>.
    Depuis .Net 4, c'est un peu plus fin, car la phrase au dessus reste vrai pour List<T> mais pour IEnumerable<T> on a le droit de dire que IEnumerable<String> est un IEnumerable<object>

    http://msdn.microsoft.com/en-us/library/dd233059.aspx

    Pour résumer, ton ClientPresenter qui est un MyBasePresenter<ClientModel, IClientView> n'est pas un MyBasePresenter<MyBaseModel, Architechture.IBaseView>

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Donc je dois passer en .Net 4 pour avoir une chance que ca marche?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Oki et en plus du .Net 4 il faut faire le casting explicitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     List<IMyI> t;
                myList mylist;
                mylist = new myList();
                t = mylist.ToList<IMyI>();
    Moins intelligent que je ne le pensais la covariance

  6. #6
    Membre expérimenté Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Par défaut
    C'est malheureusement mon plus gros problème en C# (surement en .NET d'ailleurs Oo)
    J'utilise le Framework 4 et pourtant j'ai du rusé en passant par une interface de marquage Oo
    (merci tomlev ^^)
    Je pense pas que tu doives en arriver jusque là mais je ne sais pas si il y a possibilité de le faire sans le voir comme un object (C# garde en mémoire le type malgré ça ^^)

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Tiens je me pose une question quels sont les coûts du casting de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IMyI myinterface=myA ;
    et 
    List<IMyI> myList= mylist.ToList<IMyI>();
    Je suppose que la covariance est extrèmement coûteuse au niveau ressource
    Vu comme c'est implémenté ca ressemble plus à la création d'un nouvel objet qu'à un casting

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

Discussions similaires

  1. Convertir un type collection au type set
    Par sonia5 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 24/06/2009, 13h18
  2. Les generics, hors les types collection ?
    Par jeanfr dans le forum Langage
    Réponses: 10
    Dernier message: 24/11/2008, 13h02
  3. [nested] récupérer une propriété de type collection
    Par kokumbo dans le forum Struts 1
    Réponses: 2
    Dernier message: 25/10/2007, 16h16
  4. Requete sur un champ de type collection
    Par Dev_info dans le forum Hibernate
    Réponses: 4
    Dernier message: 19/10/2007, 13h03
  5. Controle ActiveX : propriété de type Collection
    Par irreantum dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 26/03/2007, 12h54

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