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 :

Détecter un objet retourné


Sujet :

VB.NET

Vue hybride

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 152
    Par défaut Détecter un objet retourné
    Bonjour

    J'ai le code ci-dessous avec une Classe Base Toponyme et deux classes dérivées ToponymeFR et ToponymeBE
    Une fonction Detecter me permet de renvoyer la bonne classe dérivée.
    1) J'utilise dans Detecter un Return Objet ce qui ne me plait guère mais ai-je le choix?
    2) ToponymeFr et ToponymeBe ont des propriétés différentes CodeINSEE et CodeINS auxquels je n'ai pas accès dans mon Main. J'ai essayé de trouver une fonction ObjectType me permettant d'orienter le traitement en fonction de l'objet retourné par Detecter, mais sans succès.
    Merci pour votre aide.
    Bernard

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Module Module1
     
        Sub Main()
            Dim def As New List(Of String)
            def.Add("France")
            def.Add("Belgique")
            For Each d As String In def
                Dim o As Object
                o = Detecter(d)
                Console.WriteLine("Objet =" & o.ToString)
                Console.WriteLine("Nom =" & o.nom)
                Select Case objectType '???????????
                    Case ToponymeFr
                        Console.WriteLine("CodeINSEE=" & o.CodeINSEE)  '???????????
                    Case ToponymeBe
                        Console.WriteLine("CodeINS=" & o.CodeINS) '???????????
                End Select
     
            Next
            Console.ReadLine()
        End Sub
        Function Detecter(def As String) As Object
            Select Case def
                Case "France"
                    Dim topo As New ToponymeFr
                    Return topo
                Case "Belgique"
                    Dim topo As New ToponymeBe
                    Return topo
                Case Else
                    Return Nothing
            End Select
        End Function
     
        Public Class Toponyme
            Property Def As String
            Property Nom As String
            Property Code As String
            Public Sub New(d As String)
                Def = d
            End Sub
            Public Sub New()
     
            End Sub
        End Class
     
        Public Class ToponymeFr
            Inherits Toponyme
            Property CodeINSEE As String
            Public Sub New(d As String)
                MyBase.New(d)
                Nom = "France"
                Code = "Fr"
                CodeINSEE = d
            End Sub
            Public Sub New()
                Nom = "France"
                Code = "Fr"
            End Sub
     
        End Class
     
        Public Class ToponymeBe
            Inherits Toponyme
            Property CodeINS As String
            Public Sub New(d As String)
                MyBase.New(d)
                Nom = "Belgique"
                Code = "Be"
                CodeINS = d
            End Sub
            Public Sub New()
                Nom = "Belgique"
                Code = "Be"
            End Sub
        End Class
    End Module

  2. #2
    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
    au lieu de retourner un object, tu peux retourner un Toponyme (ou un T)
    les 2 toponymes héritent de toponyme donc retourner un toponyme ca passe



    tu peux faire une méthode mustinherit dans la classe de base pour demander quoi afficher, et chaque classe fille pourra alors retourner insee ou ins
    après faire du polymorphisme pour un code insee ou un code ins je ne vois pas l'utilité, c'est un code dans les 2 cas ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 152
    Par défaut
    Bonjour
    Oui je peux retourner Toponyme mais cela ne change rien car je n'ai pas accès aux propriétés des sous-classes.
    Bien sûr les sous-classes sont beaucoup plus complexes et il y a plusieurs propriétés et méthodes qui sont différentes.

    Je ne comprend pas en quoi la déclaration de la classe de base en Mustinherit modifie l'accès aux sous-propriétés?
    Merci
    Bernard

  4. #4
    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
    si tu veux une fonctionnalité commune à toutes les classes, il faut la définir sur la classe mère
    si la classe mère ne sait pas du tout ce qu'est cette fonctionnalité il faut la mettre mustinherit

    dans ton exemple de code tu cherches à afficher quelque chose (un string)
    la fonctionnalité commune sera alors un affichage, tu peux donc créer une mustinherit fonction GetString() As String sur la classe mère
    la classe Fr fera return me.codeinseee et les autres autre chose

    comme ca en retournant un toponyme de base tu pourras appeler la méthode de base et tu auras bien un retour différent pour chaque type

    si ce que tu veux faire n'est pas juste afficher un string il faut réfléchir à ce que tu souhaites faire et comment tu peux le rendre générique
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/05/2009, 15h27
  2. Réponses: 9
    Dernier message: 21/11/2008, 22h59
  3. Objet retourné incomplet
    Par afrikha dans le forum Services Web
    Réponses: 3
    Dernier message: 07/08/2008, 19h08
  4. axis 1 - Probleme objet retourné
    Par lfournial dans le forum Services Web
    Réponses: 1
    Dernier message: 07/08/2008, 17h58
  5. AD et type des objets retournés .
    Par Luffy49 dans le forum C#
    Réponses: 10
    Dernier message: 16/07/2007, 23h05

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