VBA Classes override/overload
Bonjour,
D'après mes recherches, cela n'est pas possible. Mais j'ai remarqué qu'ici beaucoup ont des connaissances plus poussées que les miennes en VBA, donc je m'en remets à vous.
1. Je sais que malheureusement le VBA est assez étrange au niveau de son fonction en POO, mais au sujet des classes, peut-on redéfinir certains opérateurs basiques pour nos objets ? Je pense notamment au Equals / "=".
2. Autrement, comment gérez-vous l'overload de manière générale, au niveau de fonctions de noms identiques mais prenant des arguments différents ? L'unique moyen est-il de définir les arguments comme Variants puis de checker le TypeName ?
Merci pour vos avis & conseils.
' Exemple
Sub mySub()
Dim myClassInstance As New MyClass
Dim str As String
display myClassInstance
display str
End Sub
Function display(var As Variant)
Select Case TypeName(var)
Case MyClass
Debug.Print var.toStr
Case String
Debug.Print var
Case Else
'
End Select
End Function
Bonjour saboh12617,
Je suis un peu largé sur ce suget.
J'ai copié ta demande et je l'ai soumise à ChatGPT qui m'a donné ceci :
Espérant que ça puisse aider.
Redéfinir les opérateurs pour des classes VBA
Dans VBA, il n'est pas possible de redéfinir directement les opérateurs tels que = pour les classes personnalisées. Toutefois, vous pouvez contourner cette limitation en définissant des méthodes au sein de vos classes pour comparer des objets. Par exemple, vous pouvez créer une méthode Equals pour comparer deux instances de votre classe.
vba
Copier le code
' Classe MyClass
Option Explicit
Private mValue As String
Public Property Get Value() As String
Value = mValue
End Property
Public Property Let Value(ByVal newValue As String)
mValue = newValue
End Property
Public Function Equals(other As MyClass) As Boolean
Equals = (Me.Value = other.Value)
End Function
Overload des fonctions en VBA
VBA ne supporte pas directement la surcharge (overload) des fonctions comme certains autres langages de programmation. La méthode la plus courante pour contourner cette limitation est d'utiliser des arguments de type Variant et de vérifier le type des arguments à l'aide de TypeName ou VarType.
Voici un exemple basé sur votre code :
vba
Copier le code
' Module
Sub mySub()
Dim myClassInstance As New MyClass
Dim str As String
myClassInstance.Value = "Hello"
str = "Hello World"
display myClassInstance
display str
End Sub
Function display(var As Variant)
Select Case TypeName(var)
Case "MyClass"
Debug.Print var.toStr
Case "String"
Debug.Print var
Case Else
Debug.Print "Type non supporté."
End Select
End Function
Conseils pour une meilleure gestion des types
Validation stricte des types : Utilisez TypeName ou VarType pour valider strictement les types d'arguments lorsque vous utilisez des Variants.
Documentez bien : Assurez-vous de bien documenter votre code, en particulier lorsque vous utilisez des Variants pour gérer différents types d'arguments. Cela aidera à la maintenabilité et à la compréhension du code.
Modularisez votre code : Essayez de garder des fonctions courtes et ciblées. Si une fonction doit gérer plusieurs types, envisagez de diviser cette fonction en plusieurs petites fonctions spécialisées.
Utilisez des interfaces : Si vous avez plusieurs classes qui partagent des méthodes communes, envisagez d'utiliser des interfaces pour définir un contrat commun. Cela peut simplifier la gestion des objets dans vos fonctions.
Bizz
Merci mais il s'agit plus ou moins d'une paraphrase avec quelques conseils de programmation généraux... Pas très affuté pour ce genre de questions assez abstraites le chatgpt, merci quand meme. J'imaginais que l'usage des classes était plus courant.