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 :

Cast de generiques


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Par défaut Cast de generiques
    Bonjour à tous,

    J'ai le bout de code suivant:
    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
     
    public interface IItem { }
    public class MonObjet : IItem { }
     
    public abstract class ItemCollection<TItem> 
        : Collection<TItem> where TItem : IItem
    {
    }
     
    public class ObjetCollection : ItemCollection<MonObjet>
    {
    }
     
    static class Program
    {
        static void Main
        {
        ItemCollection<IItem> = new ObjetCollection();
        }
    }
    Le compilateur me retourne une erreur: impossible de caster.

    Pourtant, mes 2 collections derivent l'une de l'autre, mes types paramètres derivent l'un de l'autre.

    Je cherche une explication à celà.
    Une idée??
    Bruno

  2. #2
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ItemCollection<IItem> blabla = new ObjetCollection();

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut
    Peut-être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ItemCollection<MonObjet> b = new ObjetCollection();

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Par défaut
    Oui effectivement, c'est ce que j'ai, faute de recopiage....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ItemCollection<IItem> MaCollec = new ObjetCollection();

  5. #5
    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
    Erreur classique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Mere { }
    class C1 : Mere { }
    class C2 : Mere { }
     
    List<Mere> liste = new List<C1>(); // exception
    Donc : une liste de C1 n'est pas une liste de Mere. Pourquoi ? Parce qu'on peut faire Add(new C2()) à une liste de Mere, alors qu'on ne peut pas le faire à une list de C1. On peut pas traiter une liste de classes dérivées comme une liste de classe de base.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Par défaut
    Effetivement expliqué comme cà, ca parrait logique.
    Merci Guulh!!!!!

    Mon soucis d'origine etait celui ci:

    I est une interface pour un noeud d'arbre, contenant le parent (un autre I) et une collection de noeuds enfants d'un seul type C1 ou C2.
    J'ai 2 classe C1 et C2 qui implementent I

    Mon idée etait la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    interface I 
    {
        I Parent;
        BaseCollect Children;
    }
     
    class C1 : I {}
    class C2 : I {}
     
    class BaseCollec : Collection<I> {}
    class C1Collec : Collection<C1> {}
    class C2Collec : Collection<C2> {}
    Mais vu la remarque de Guulh ci dessus, je ne peux pas créer une instance de C1Collec ou C2Collec et l'affecter à Children...

    Une idée parmi l'assistance?

  7. #7
    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
    Déjà, tu ne peux pas mettre de champs dans une interface.

    Mauvaise idée, changer idée

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Déjà, tu ne peux pas mettre de champs dans une interface.
    Exact, c'est pas des champs mais des propriétés.

    Citation Envoyé par Bluedeep Voir le message
    Mauvaise idée, changer idée
    Merci, j'aime bien cette dernière proposition, je crois que je vais m'orienter là dessus....

Discussions similaires

  1. [Débutant] Cast d'objet generique
    Par mayekeul dans le forum C#
    Réponses: 16
    Dernier message: 12/10/2011, 15h06
  2. Cast dynamique dans class generique
    Par topolino dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/03/2009, 16h21
  3. CAST ou autre ?
    Par 74160 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/07/2003, 15h00
  4. CAST DATETIME ----> SMALLDATETIME
    Par Guizz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/06/2003, 12h07
  5. traduction en delphi "reinterpreted cast"
    Par Chupakabra dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2003, 15h49

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