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 :

[c#][2.0] BindingList capricieuse


Sujet :

C#

  1. #1
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut [c#][2.0] BindingList capricieuse
    Bonjour,

    je vous expose mon problème.

    J'ai implémenté une méthode, cette méthode possède la signature suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void InitializeKeys(BindingList<IKey>);
    IKey étant une interface simple demandant d'implémentant 3 propriétés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public interface IKey {
       string Id { get; set; }
       string Value { get; set; }
       string Description { get; set; }
    }
    donc voila ou se situe mon soucis, dans un objet héritant de celui implémentant ma méthode InitializeKeys, je fais appel a cette meme méthode.
    Alors mon appel, lui passe en argument une BindingList<MotCle>
    MotCle implémentant l'interface IKey
    possedant bien les propriétés requises :
    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
            #region IKey Members
            string IKey.Description
            {
                get { return this.DescFonc; }
                set { Console.Out.WriteLine("value : " + value); }
            }
     
            string IKey.Id
            {
                get { return this.Id; }
                set { Console.Out.WriteLine("value : " + value); }
            }
     
            string IKey.Value
            {
                get { return "<" + this.CodeFonct + ">"; }
                set { Console.Out.WriteLine("value : " + value); }
            }
            #endregion
    et a la compilation ca me dit :
    Error 2 Argument '1': cannot convert from 'System.ComponentModel.BindingList<MotCle>' to 'System.ComponentModel.BindingList<IKey>'
    alors il faut ptet savoir que l'objet MotCle est une classe partielle, que dans l'autre classe partielle definissant cet objet, il y a une propriété Id, je me dis qu'il y a ptet un conflit la dessus, mais la definition des propriétés nécessaires a IKey etant bien distinguées par le prefix IKey, je ne vois pas ou est le soucis...et donc...si ca ne marche pas...quel interet de faire des interfaces....?

    voila...merci d'avance

  2. #2
    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
    Bon je n'ai pas trop travaillé avec les interfaces, mais moi ce que je comprends de ton code c'est que ta méthode "InitializeKeys" à besoin d'un "BindingList" contenant des objets de type "IKey" et que tu lui fournis un "BindingList" contenant des objets de type "MotCle". Donc pour moi c'est normal que le compilateur gueule.
    Pour moi une interface assure au développeur que un objet implémentant l'interface possède bien les méthodes définies par l'interface. Mais en aucun cela ne devrait affectés son type.
    Bon maintenant je n'ai pas utilisé d'interface en .Net alors je peut me tromper .

  3. #3
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    bah visiblement oui...c'est normal..
    mais je vais quand meme pas faire un type abstrait...
    ca pourrait revenir au meme quand meme...il peut caster ce MotCle en IKey normalement...l'est pas belu ce compilateur quand meme

  4. #4
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    alors j'ai testé ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MotCleCollection collection = MotCle.GetAll();
    BindingList<IKey> list = new BindingList<IKey>();
    foreach (IKey key in collection)
    {
       list.Add(key);
    }
    et ca...aucun problème, la bindingList a bien le meme nombre d'elements et ils sont corrects

  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
    pour le compilateur ton bindinglist<motcle> n'est pas un bindinglist<ikey>.

  6. #6
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    bah oui..j'ai cru voir...c'est bien con d'ailleurs
    il fait pas d'effor lui aussi

  7. #7
    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
    Donc tu doit gérer toi même la conversion.
    Donc tu n'as plus de poblème .

  8. #8
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    bah j'ai laissé comme j'ai mis....mais c'est con...je trouve ca dégueu un peu quand meme

  9. #9
    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
    Sauf si c'est la seul solution.

  10. #10
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    bah j'ai meme pas envie de passer par un objet abstrait a la place de l'interface....meme pour essayer...je veux pas

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Par défaut
    Ai déjà eu ce problème avec des classes héritées. Avec un classe abstraite tu auras sans doute le même problème. Ceci est lié au fait que les génériques sont invariant.

    Cependant avec une interface tu dois avoir la possibilité d'ajouter une contrainte sur ton objet pour que cela fonctionne( et une autre contrainte pour faire fonctionner ton constructeur )

    par ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class SpecialNodeItem<T> : NodeItem<T> where T : System.IComparable<T>, new() { }
    cf le lien suivant

  12. #12
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    pas bete, mais ma classe MotCle est partielle et l'autre classe la complétant est générée, et je n'ai pas le droit de la modifier....donc je ne peux pas modifier le type en rajoutant

    ce n'est plus le meme type dans les 2 classes

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Par défaut
    Et une méthode du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void InitializeKeys<T>(IBindingList<T> p_liste) where T : IKey
    {
     
    }

Discussions similaires

  1. [Cookies] Variable de Session capricieuse :/
    Par nikospkrk dans le forum Langage
    Réponses: 8
    Dernier message: 19/08/2006, 13h11
  2. [IconImage] IconImage capricieuse
    Par GLDavid dans le forum Interfaces Graphiques en Java
    Réponses: 12
    Dernier message: 20/06/2006, 14h46
  3. procédure stockée capricieuse
    Par misa dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 11/01/2006, 11h07
  4. [INSTALL][10gR2] Installation capricieuse
    Par max44410 dans le forum Oracle
    Réponses: 15
    Dernier message: 13/12/2005, 00h34
  5. Balise <DIV> capricieuse..!!
    Par nerik38 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 24/11/2005, 16h43

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