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

VB.NET Discussion :

Classe dérivée de String


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 102
    Par défaut Classe dérivée de String
    Bonjour,

    Je sais qu'il est impossible de faire hériter une classe de la classe String (NotInheritable).

    Par contre, j'aimerais avoir une classe ayant toutes les fonctionnalités de la classe String et d'autres fonctionnalités perso.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim myString as StringPerso = "J6Y1Y5"
    Dim codePostal as String = myString.ToCodePostal  (retourne: J6Y 1Y5)
    J'aimerais également pouvoir faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim myString as String = "J6Y1Y5"
    Dim codePostal as String = myString.ToCodePostal.ToString
    Est-ce réalisable?


    Merci.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    oui

    avec le framework 3 il est possible d'étendre des classes (même celle du framework (rechercher méthodes d'extension))

    le string perso n'est sans doute pas utile, bien que ...
    il faut faire une structure avec un convertisseur de string en ta classe pour pouvoir écrire = "blabla" (enfin c'est faisable pour les propertygrid, peut etre que ca l'est pour le code, sinon faut utiliser un new par exemple)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 102
    Par défaut
    Merci Pol63 pour ta réponse rapide

    Effectivement, j'ai pas besoin d'une classe String perso avec l'extension qui
    fonctionne très bien mis à part que mon extension est dans un fichier .dll que
    j'ajoute en référence dans mon projet. Je dois donc importer pour que ça
    fonctionne.

    Pour les intéressés, voici mon code:

    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
    Imports System.Runtime.CompilerServices
     
    Public Module StringExtension
     
        <Extension()> _
        Public Function ToCodePostal(ByVal myString As String) As String
            'Si le format est par exemple J6Y1Y5
            If myString.Length = 6 Then
                'Retourne ceci: J6Y 1Y5
                Return (Strings.Left(myString, 3) & " " & Strings.Right(myString, 3)).ToUpper
     
            Else
                Return myString
            End If
        End Function
    End Module
    Pour l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Imports Noyau.StringExtension
     
    ...
     Public Property CodePostal As String
            Get
                Return Me._CodePostal.ToCodePostal
            End Get
            Set(ByVal value As String)
                Me._CodePostal = value.ToCodePostal
            End Set
        End Property
    ...

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    En dehors de toute considération technique, je pense que ton approche objet de la question n'est pas du tout la bonne.

    L'héritage sert à faire des rapprochements sémantiques pas à réutiliser du code. (poru cela, il y a l'aggrégation).

    Dans ton cas, je ferais plutôt un classe "CodePostal" , qui implémenterait un opérateur de cast explicite (voire implicite mais c'est pas conseillé), avec lequel tu pourrais faite des choses du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CodePostal myCp = (string)myStringWithCPContent;
     
    String myString = (string) myCodePostal;
    Voir les mots clefs explicit et implicit

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 102
    Par défaut
    Ouin, pas sûr de comprendre... je vais y jeter un coup d'oeil lorsque j'aurais quelques minutes car j'ai toujours pour but de m'améliorer.


    Merci Bluedeep.

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Passepoil Voir le message
    Ouin, pas sûr de comprendre... je vais y jeter un coup d'oeil lorsque j'aurais quelques minutes car j'ai toujours pour but de m'améliorer.


    Merci Bluedeep.
    désolé, je m'aperçois que je t'ai passé les mots clefs en C# et pas en VB.Net. Mais il y doit y avoir l'équivalent.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    l'équivalent de (string) variable est directcast(variable,string)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 102
    Par défaut
    J'avais remarque que c'était du c#

    Je connaissais déjà le directcast. Par contre, j'aime bien la méthode d'extension. Je n'ai plus besoin de classe String dérivée.

    Merci de votre aide

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

Discussions similaires

  1. classe dérivée de thread
    Par aaronw dans le forum Threads & Processus
    Réponses: 9
    Dernier message: 08/03/2006, 15h35
  2. Réponses: 2
    Dernier message: 06/12/2005, 09h41
  3. Réponses: 4
    Dernier message: 20/11/2005, 05h48
  4. [MFC] CArray et classe dérivée?
    Par TigreRouge dans le forum MFC
    Réponses: 14
    Dernier message: 02/08/2005, 22h45
  5. Déterminer le type d'une class dérivée
    Par LDDL dans le forum MFC
    Réponses: 3
    Dernier message: 10/12/2004, 17h36

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