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 :

Problème avec une variable de type "Type"


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    analyste programmeur
    Inscrit en
    Février 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 2
    Par défaut Problème avec une variable de type "Type"
    Bonjour à tous,

    voilà mon souci, je dois récupérer une variable de type "Type" (contenant le type d'une classe) en paramètre d'une méthode. Dans la méthode le suis supposé créer un objet du type en question, mais je galère depuis des heures et le compilateur ne veut rien savoir ... Si je tape par exemple "return new variabletype()" il me dit "variabletype est une variable mais est utilisée comme un type". J'ai eu beau essayer d'écrire l'instruction de 50 manières différentes, rien de concluent

    Auriez-vous une idée ?

  2. #2
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847

  3. #3
    Candidat au Club
    Homme Profil pro
    analyste programmeur
    Inscrit en
    Février 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 2
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Merci Sehnsucht mais malheureusement celà ne fonctionne pas
    J'ai le message suivant : "Impossible de convertir implicitement le type 'object' en 'Abstract_Factory.Personnage'. Une conversion explicite existe (un cast est-il manquant?)

    Voilà le code:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Batiment : FactoryGeneric<Personnage>
        {
            public override Personnage Create(Type type)
            {
                return Activator.CreateInstance(type);
            }
        }

    L'idée est de renvoyer un Objet d'un enfant de la classe Personnage. J'y suis parvenu en utilisant un switch pour tester le type d'objet reçu en paramètre mais dans ce cas je perds le coté générique de la méthode car je dois prévoir les différents types pouvant être reçus

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    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 202
    Par défaut
    Cast explicite
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bon perso, le design de jeu (vu qu'a priori il s'agit de ça) j'y connais pas grand chose, mais j'ai souvent lu que le modèle OO ne collait pas génial (ça parle souvent d'ECS plutôt) du coup si ça se trouve t'as pas la bonne approche mais ça je ne saurais dire.

    En attendant, tu dis vouloir créer une instance d'un type dérivé de Personnage, pourquoi tu te fais pas une méthode générique avec des contraintes sur ce paramètre générique ?
    Schématiquement (flemme de tester dans l'idée donc pas forcément 100% juste) un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personnage Create<T> () where T : Personnage, new() => Activator.CreateInstance<T> ();
    À noter que si cette méthode est directement dans ta factory pas besoin de l'overrider derrière dans Batiment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Factory<T>
    {
        public T Create<U> where U : T, new() => Activator.CreateInstance<U> ();
    }
    Je précise également que j'ajoute la contrainte new() à chaque fois qui indique que le type doit posséder un constructeur sans paramètre, ça permet à Activator.CreateInstance de créer l'objet en l'appelant

Discussions similaires

  1. Problème avec une variable de type objet
    Par mrocks dans le forum C#
    Réponses: 7
    Dernier message: 09/05/2009, 22h27
  2. problème avec une variable de type string
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2007, 14h53
  3. [PHP-JS] problème avec une variable
    Par schats dans le forum Langage
    Réponses: 14
    Dernier message: 15/04/2007, 13h54
  4. [Javascript] problème avec une variable
    Par creatik dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/09/2006, 18h38

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