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 :

Fonction cast dynamique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut Fonction cast dynamique
    Bonjour,

    Je cherche à créer un moyen pour caster un objet en un type d'objet qui peut varier.

    Ex :
    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
    public MaClass0 monObjet; 
    if (unParam is MaClass1)
    {
        monObjet = (MaClass1)monObjet;
    } 
    else
    {
        if(unParam is MaClass2)
        {
            monObjet = (MaClass2)monObjet;
        }
        else
        {
            monObjet = (MaClass3)monObjet;
        }
    }
    J'ai pas testé cet algorithme, mais je pense que ça devrait marcher.

    Dans la réalité, j'ai une vingtaine de MaClassX, et je voudrais savoir s'il je peux caster directement sans passer par des if, une solution du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monObjet = (typeOf(unParam))monObjet;
    Ca vous dit quelque chose? Merci d'avance pour vos idées!

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 135
    Par défaut
    Pour convertir d'un type à l'autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var result = Convert.ChangeType(monObjet,typeof(MyClass));
    mais ça te retourne un objet...

    Sinon, pour savoir si un objet est assignable à un autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    typeof(maclasse).IsAssignableFrom(typeof(monautreclasse));
    Ceci dit, je pense pas que ce soit ce que tu cherches.
    Sinon, il y a le mot clé "dynamic" : Mais tu perds l'avantage du typage fort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dynamic obj = monobjet;
    obj.NimporteQuoi(); // compilera, même si la methode n'existe pas. sera résolu au runtime.
    Enfin, il y a les génériques.

    Mais il faudrait surtout savoir ce que tu veux faire derrière avec tout ça !

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Bonjour,

    Y a t-il un réel besoin de caster dynamiquement ?

    Dans 99% des cas, ce cast n'est pas nécessaire et il y a un autre moyen plus propre de procéder.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 135
    Par défaut
    Citation Envoyé par MaximePalmisano Voir le message
    Y a t-il un réel besoin de caster dynamiquement ?

    Dans 99% des cas, ce cast n'est pas nécessaire et il y a un autre moyen plus propre de procéder.
    +1

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monObjet = (MaClass1)monObjet;
    Bah ça sert à rien de faire ça, monObjet est toujours déclaré comme MaClass0, donc ça t'apporte rien... quel est le but au final ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Bah ça sert à rien de faire ça, monObjet est toujours déclaré comme MaClass0, donc ça t'apporte rien... quel est le but au final ?
    Au temps pour moi. Mauvais exemple. Pour rectifier ça, disons que je vais créer un autre objet monObjet1, de classe variant selon le typeOf, après chaque if ^^

    PS : Merci pour vos remarques, je ne les ai pas lues avant mon dernier post... Enfin l'avant dernier

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    135
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 135
    Par défaut
    Regarde les opérateurs de conversion

    Et utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Convert.ChangeType(object,Type)

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    lu en diagonale
    une classe ou méthode générique n'irait pas par hasard ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    Merci icaero,

    Je pense que c'est ici que ça devient dur...

    Parce que même si j'arrive a caster mon objet, je ne pense pas que ça déclenchera les constructeurs de ma class. Autrement dit, supposons que ma classe a un constructeur MaClass() et une méthode maMethode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public MaClass()
    {
        instruction1;
        instruction2;
    }
     
    public void maMethode()
    {
        instruction3;
    }
    Après le cast, je peux bien entendu lancer maMethode(), mais les instructions qui sont dans le constructeurs, je ne pense pas qu'ils seront exécutées!

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    Merci tout le monde, j'ai assez de solutions à tester

    Bonne fin de journée!

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

Discussions similaires

  1. Problème fonction cast!
    Par pegautier dans le forum Langage SQL
    Réponses: 2
    Dernier message: 22/11/2006, 10h39
  2. Fixer une constante dans une fonction générée dynamiquement ?
    Par XecTech dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/08/2006, 20h59
  3. Cast dynamique d'un objet ?
    Par elitost dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2006, 10h43
  4. Réponses: 13
    Dernier message: 20/06/2005, 14h13
  5. [DP][héritage]sous-casting dynamique
    Par Le prophete dans le forum Général Java
    Réponses: 4
    Dernier message: 20/08/2004, 11h56

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