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 :

Appel fonction hérité / Polymorphisme [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 192
    Par défaut Appel fonction hérité / Polymorphisme
    Bonjour,

    je suis un peu perdu concernant l'appel de fonction d'une classe hérité.

    j'ai une classe de base contenant une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        public abstract class SCCMObject : IResultObject
        {
    ............
     public static virtual void SetObjectPath(List<SCCMObject> lstToCompare, WqlConnectionManager connection)
            {....}
     
    }
    Je possède une classe hérité et je souhaite appeler la fonction SetObjectPath qui appartient à la classe SCCMObject

    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
     
        public class SCCMAdvertisement : SCCMObject
        {
    .....
     
            public static List<SCCMAdvertisement> GetAllAdvertisements(WqlConnectionManager connection)
            {
                SCCMAdvertisement objRet = new SCCMAdvertisement();
                List<SCCMAdvertisement> lstAdvlReturn = new List<SCCMAdvertisement>();
                foreach (IResultObject resObj in objRet.GetAllObjects(connection))
                {
                    SCCMAdvertisement tmp = new SCCMAdvertisement(resObj);
                    lstAdvlReturn.Add(tmp);
                }
                  //Appel de ma fonction hérité
                 SetObjectPath(lstAdvlReturn, connection);
                return lstAdvlReturn;
            }
    }
    cependant je me retrouve avec le message d’erreur suivant avant la compilation

    Erreur 2 La méthode surchargée correspondant le mieux à '.Objects.SCCMObject.SetObjectPath(System.Collections.Generic.List<Objects.SCCMObject>, Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlConnectionManager)' possède des arguments non valides

    Erreur 3 Argument 1*: impossible de convertir de 'System.Collections.Generic.List<Objects.SCCMAdvertisement>' en 'System.Collections.Generic.List<Objects.SCCMObject>'
    En gros je comprend que je dois fournir une liste de SCCMObject au lieu d'une liste de SCCMAdvertisement .
    Mais pour moi un SCCMAdvertisement "est" un SCCMObjet. Y'a il une faute dans ma déclaration ou ma logique est elle mauvaise ?
    Merci pour votre aide

  2. #2
    Membre actif
    Homme Profil pro
    Architecte C#
    Inscrit en
    Février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : Février 2003
    Messages : 78
    Par défaut
    Bonjour,

    oui, une List<T> est différent d'une List<U> meme si T:U...

    Par contre, pour y répondre simplement, avec le using tu peux contourner avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetObjectPath(lstAdvlReturn.Cast<SCCMObject>().ToList(), connection);
    A noter :

    En général, si ta méthode n'ajoute pas d'éléments, il est préférable d'y faire entrer un IEnumerable<T> en entrée au lieu d'une liste ou un tableau :
    IEnumerable<T> étant au niveau le plus haut, il accepte indépendemment tableaux de T ou List<T> et du coup, ça évite de devoir faire ToList ou ToArray dans le code pour y passer le paramètre.

    de plus, avec la V4 du framework et la covariance, tu n'as plus besoin de caster, le code suivant fonctionnne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class A
        {
        }
        public class B:A
        {   
        }
    ...
                List<B> l1 = new List<B>{new B()};
                IEnumerable<A> l2 = l1;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 192
    Par défaut
    Hello Vimaire

    Merci pour ta réponse, ca m'a bien éclairé ;-)

  4. #4
    Membre actif
    Homme Profil pro
    Architecte C#
    Inscrit en
    Février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : Février 2003
    Messages : 78
    Par défaut
    Je t'en prie, je t'ai ajouté d'autres éléments de réponse pour gérer ca avec la covariance

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 192
    Par défaut
    Ah oui en effet, j'avais utilisé la covariance, mais ça ne marchait pas.... car j'étais en Framework 3.5 ;-)

    Merci

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

Discussions similaires

  1. Appel fonction php dans code javascript
    Par licorne dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/03/2008, 10h55
  2. PB pour Appel fonction dans DLL sur Builder3
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 10/03/2005, 12h58
  3. pro c appelle fonction connexion
    Par friends dans le forum Oracle
    Réponses: 3
    Dernier message: 10/05/2004, 17h07
  4. Appels fonctions DLL
    Par Micka91 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 17/02/2004, 17h32
  5. Appel fonction assembleur en C
    Par grandjouff dans le forum C
    Réponses: 6
    Dernier message: 07/12/2003, 20h43

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