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 :

Nouvelle classe : Cannot implicitly convert type 'string' to


Sujet :

C#

  1. #1
    Membre confirmé
    Avatar de chemanel
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 173
    Points : 457
    Points
    457
    Par défaut Nouvelle classe : Cannot implicitly convert type 'string' to
    Bonjour,

    Après quelques recherches infructueuse sur le forum, je décide de créer se post pour répondre a une de mes questions.

    Je dois actuellement coder une classe qui sera utilisé par mes collègues.

    C'est une classe toute simple, qui en fait a le comportement d'une string qui correspond à un numéro de téléphone, et qui formate celui ci.

    Ma question est la suivante, pour le moment les gens qui utilise cette classe son obligé de faire ceci :

    PhoneNumber a = new PhoneNumber("0032234240294");

    Si j'essaye de faire ceci :

    PhoneNumber a = "0032234240294";

    ça leurs faciliterai l'utilisation de ma classe, cepandant, j'obtiens le message d'erreur suivant :

    Cannot implicitly convert type 'string' to 'PhoneNumber'


    J'ai un peu cherché sur le net et sur le forum sans rien trouver... J'imagine que je ne suis pas le seul à vouloir faire qqch du genre... existe t il une solution?

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    C'est possible, mais franchement ça laisse à désirer une telle manière de procéder. Faciliter la vie des développeurs c'est bien, mais si on en arrive à faire de telles choses ...

    Si tu tiens absolument à le faire, il faut mettre en place un opérateur de conversion implicite
    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 class PhoneNumber
    {
        private string _number;
     
        public string Number
        {
            get { return _number; }
            set { _number = value; }
        }
     
        public PhoneNumber(string number)
        {
            _number = number;
        }
     
        public static implicit operator PhoneNumber(string s)
        {
            return new PhoneNumber(s);
        }
    }

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    C'est tout à fait normal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PhoneNumber a = new PhoneNumber("0032234240294");
    Ceci représente une instanciation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PhoneNumber a = "0032234240294";
    Par contre ceci représente une demande une conversation implicite entre une chaine et un objet de type PhoneNumber.

    A noter que si PhoneNumber est une classe alors new PhoneNumber est absolument indispensable puisque qu'en .NET il faut obligatoirement instancier une objet de type référence (par contre ce n'est pas vrai pour les types valeurs)

    Si tu veux que ton assignation fonctionne correctement, il faut implémenter dans PhoneNumber, une surcharge d'opérateur implicite ou explicite selon les cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static implicit operator PhoneNumber(string value)
    {
         return new PhoneNumber(value);
    }
    Dans le cas d'utilisation du mot clé explicit à la place d'implicit, la conversion doit être suivie d'un opérateur de casting comme suit; Il est préférable d'utiliser le mot clé explicit pour supprimer le caractère permissif du compilateur dans le cas ou plusieurs opérateurs implicit seraient utilisés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PhoneNumber a = (PhoneNumber)"0032234240294";

  4. #4
    Membre confirmé
    Avatar de chemanel
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 173
    Points : 457
    Points
    457
    Par défaut
    Merci à tout les deux pour vos réponses... et surtout pour vos explications !! ça m'as permis de bien comprendre et ça va pouvoir m'être utile dans d'autre cas ! Un grand merci !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/05/2015, 03h29
  2. [Débutant] Impossible de convertir implicitement le type 'string' en 'int?'
    Par Mougain's dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/11/2014, 15h29
  3. Réponses: 5
    Dernier message: 01/05/2012, 14h25
  4. Réponses: 4
    Dernier message: 08/11/2010, 17h27
  5. Réponses: 6
    Dernier message: 20/08/2009, 17h06

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