Bonjour tous le monde,
je voudrais ajouter une méthode à ma classe qui gère les fichiers .ini mais sans toucher à la classe de base.
IniFile est la classe principale (Publique) auquel on accède depuis le programme principale.
En toute logique j'ai donc commencé par créer une nouvelle classe INI dérivée de IniFile et surcharger la propriété 'Item' pour pointer non plus sur IniFileSection mais sur la nouvelle class IniSection qui devra implémenter 'GetValue', en me disant que IniSection sera dérivée de IniFileSection. Jusque là pas de problème.
Pour info : IniFileSection stocke les clés.
Problème :
le constructeur de IniFileSection et donc également de IniSection demande 2 paramétres (Parent as IniFile, Section as IniFileSectionStart). Ceux qui veux dire que IniFileSection fait référence à la classe parent IniFIle. Et c'est là que les ennuis commence je crois :
Dans ma classe dérivée INI, j'ai créer une instance de INISection et s'en ai suivi un jolie overflow exception.
Il me semble que tout mes ennuis proviennement de cette instance de IniFile dans IniFileSection, vous pouvez confirmer ?
Est ce correcte d'un point de vue POO de procéder comme ceci ? Il me semble que ça enlève tout possibilité d’héritage non ?
Question subsidiaire : Comment modifier la classe pour se passer de cette instance de INIFile dans INIFileSection (je peux fournir plus de code si besoin) ?
Enfin j'ai une solution : celle d'abandonner l’héritage pour placer ma méthode GetValue directement dans IniFileSection mais le but est de comprendre le probléme et comment faire une classe qui puisse être dérivée facilement dans les règles de l'art et ainsi pouvoir facilement l'améliorer.
Extrait du code de la classe de base IniFile :
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 Public Class IniFile Friend sections As New List(Of IniFileSection)() Friend elements As New List(Of IniFileElement)() Public Sub New() End Sub Public Sub New(path As String) ' FromFile ...... End Sub Default Public ReadOnly Property Item(sectionName As String) As IniFileSection Get Dim sect As IniFileSection = getSection(sectionName) ....... Return sect End Get End Property End Class
Extrait du code de la classe de base IniFIleSection :
Utilisation de la méthode depuis le programme principale :
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 Public Class IniFileSection Friend elements As New List(Of IniFileElement)() Friend sectionStart As IniFileSectionStart Friend _parent As IniFile Friend Sub New(parent As IniFile, sect As IniFileSectionStart) sectionStart = sect _parent = parent End Sub Default Public Property Item(keyName As String) As String Get Dim v As IniFileValue = getValue(keyName) Return If(v Is Nothing, Nothing, v.Value) End Get Set(value As String) Dim v As IniFileValue v = getValue(keyName) If v IsNot Nothing Then v.Value = value Return End If setValue(keyName, value) End Set End Property End Class
Squelette d'implémentation de la méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ' Méthode d'origine de la classe de base : Dim Valeur As String = INI1("Section1")("Clé1") ' On récupère un String ' Nouvelle méthode de la classe dérivée : Dim Valeur As Integer = INI1("Section1").GetValue(Of Integer)("Clé1") ' On récupère une valeur typée
Je vous remercie beaucoup pour votre nouvelle aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Public Function GetValue(Of T)(ByVal KeyName As String) As T ..... Return Value ' Retour la valeur typée (of T) End Function
Partager