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.

Rechercher des sujets similaires à "vba classes override overload"