Bonjour,
Voilà, je fais de la programmation depuis quelques temps et je pense connaitre assez bien les classes, l'héritage & co.

J'ai 2 questions :
1 - Quelles différences y a-t-il entre une classe et une structure ? (ça j'imagine que c'est facile)

2 - Je cherche à avoir l'organisation suivante :
Une classe de base a des propriétés et méthodes commune à plusieurs classes dérivées, avec la méthode de l'héritage, je profite bien de tout ça, mais dans ma classe, j'ai une List(Of MaClasseDeBase) sur laquelle mes méthodes s'appuient pour faire des traitements, et le problème réside dans le fait que je cherche à initialisé cette liste de MaClasseDeBase avec des objets qui hérite justement de MaClasseDeBase.

Un exemple c'est toujours plus parlant :
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
Private MustInherit Class MaClasseDeBase
#Region "Attributs"
    ' Plusieurs attributs, mais c'est celles-ci qui m'intéressent
    Protected _str_Texte As String
    Protected _lof_MaClasseDeBase As List(Of MaClasseDeBase)
#End Region
 
#Region "Property"
    ' Plusieurs propriétés, mais c'est celle-ci qui m'intéresse
    Public ReadOnly Property Texte As String
        Get
            Return _str_Texte
        End Get
    End Property
#End Region
 
    ' Constructeur générique
    Public Sub New(ByVal plof_BaseObjet As List(Of MaClasseDeBase))
        _lof_BaseObjet = plof_BaseObjet
    End Sub
 
    ' Gérérer le texte de l'objet de base
    Protected Sub GenererTexte()
        _str_Texte = ""
        For Each bmcb_MaClasseDeBase As MaClasseDeBase In _lof_BaseObjet
            _str_Texte &= bmcb_BaseObjet.Texte
        Next
    End Sub
    ' Autres méthodes s'appuyant sur MaClasseDeBase sur d'autres attributs
End Class
 
Private Class MonAutreClasse
    Inherits BaseObjet
#Region "Attributs"
    ' Attributs supplémentaires
#End Region
 
#Region "Property"
    ' Propriété supplémentaires
#End Region
 
    Public Sub New()
    End Sub
End Class
 
Private Class MaClasse
    Inherits BaseObjet
#Region "Attributs"
    ' Attributs supplémentaires
#End Region
 
#Region "Property"
    ' Propriété supplémentaires
#End Region
 
    Public Sub New(ByVal plof_MonAutreClasse As List(Of MonAutreClasse))
        MyBase._lof_MaClasseDeBase = plof_MonAutreClasse ' C'est par là que ça coince puisque les objets ne sont pas pareils, je le comprend, mais en même temps, ces objets hérites tous de MaClasseDeBase pour utiliser les méthodes et les propriétés identiques.
    End Sub
End Class
 
Public Sub Main()
    Dim llof_MonAutreClasse = New List(Of MonAutreClasse)
    ' Initialisation de la liste de MonAutreClasse
    Dim lmcl_MaClasse = New MaClasse(llof_MonAutreClasse)
End Sub
Message d'erreur :
Impossible de convertir 'MonAutreClasse' en 'MaClasseDeBase'
La raison profonde de la mise en place de cette structure est que j'ai 5 niveaux de classe héritant de MaClasseDeBase dont MaClasse (niveau n) est instancié avec une liste de MonAutreClasse (niveau n-1) et ainsi de suite jusqu'au niveau n-5