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