Définir des opérateurs

Résolu
cs_pingouin84k Messages postés 68 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 9 janvier 2011 - 26 janv. 2010 à 22:10
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 - 27 janv. 2010 à 17:24
Bonjour,

J'aimerai définir des opérateurs +, -, * etc pour des objets de type Array.
Et pourquoi pas, définir des fonctions mathématiques sin, cos, exp, etc pour également des type Array.

Y a t'il un moyen ? Et si oui on fait comment ?

Merci pour votre aide :D

9 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
27 janv. 2010 à 12:36
Tu ne peux pas modifier les opérateurs de types systèmes (tel que les string, les integer, les tableaux etc...)

Il te faut créer une classe perso hérité et créer/surcharger les opérateurs.

Exemple :

Ici j'utilise une liste générique d'Integer

Public Class MaList
    Inherits List(Of Integer)

    Public Shared Operator +(ByVal Value1 As MaList, _
                             ByVal Value2 As MaList) As MaList
        Dim retValue As New MaList
        With retValue
            .AddRange(Value1)
            .AddRange(Value2)
        End With
        Return retValue
    End Operator

End Class


En suite j'utilise cette classe comme ceci :

        Dim Tableau1 As New MaList
        Dim Tableau2 As New MaList
        Dim Tableau3 As New MaList

        With Tableau1
            .Add(1)
            .Add(2)
            .Add(3)
        End With

        With Tableau2
            .Add(3)
            .Add(4)
            .Add(5)
        End With

        Tableau3 = Tableau1 + Tableau2
       'Ici, Tableau 3 contiendra les valeurs de Tableau1 et Tableau2 



Voila pour l'exemple.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
27 janv. 2010 à 16:04
Et pour ma seconde question... Est ce que les fonctions mathematique de la classe Math peuvent être surchargé pour être utilisé avec ma classe perso ?


La réponse est: NON.

La classe Math est NotInheritable, de plus elle ne comporte que des fonctions partagés(Shared), ce qui implique qu'elle n'a pas besoin d'être instancié pour faire appel à ses fonctions :

Dim i As Integer = Math.Round(2.333, 0)'On ne déclare pas Math

Tu peux donc créer une classe NotInheritable dans ton projet et lui déclarer des fonctions paragés cela revient strictement au même. Je continu mon exemple avec des listes génériques :

Public NotInheritable Class Math2

    Public Shared Function RoundList(ByVal value As List(Of Double), _
                                     Optional ByVal digits As Integer = 0_
                                     ) As List(Of Double)
        Dim retValue As New List(Of Double)
        For Each Item As Double In value
            retValue.Add(Math.Round(Item, digits))
        Next
        Return retValue
    End Function

End Class

Que l'on pourra appeler comme ceci :

        Dim TabBase As New List(Of Double)
        Dim TabRounded As New List(Of Double)

        With TabBase
            .Add(3.998552)
            .Add(4.998525)
            .Add(85525.484421)
        End With

        TabRounded =  Math2.RoundList(TabBase, 2)

Et nous disposerons d'une fonction pour arrondir les valeurs d'une liste générique de 'Double'.

Petite précision :

.Net est une technologie, VB2005 est une EDI (IDE in english), la différence est la suivante :

VB6 => Technologie vb => Runtimes vb6
VB2003 => Technologie .NET1 => Version framework 1.1
VB2005 => Technologie .NET2 => Version Framework 2.0
VB2008 => Technologie .NET3 => Version Framework 3.5
VB2010 => Technologie .Net4 => Vesrion Framework 4.0

Ce que l'on nomme .Net est la technologie (VB de 2003 à 2010).

Tu es donc dans la bonne catégorie ;O)

Voila, ++

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
xranto Messages postés 90 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 31 mars 2014
27 janv. 2010 à 00:18
Salut,
Je ne comprend pas très bien ce que tu veux dire par type Array mais on peut utiliser du type Variant et le transformer en Array après.
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
27 janv. 2010 à 01:33
Salut,

En .Net, dans une classe tu peux définir les opérateurs en les déclarant comme ceci comme ceci :

Public [Overloads] Shared [Shadows] Operator {Opérateur} _
(ByVal value As {Type}) As {Type}
End Operator


Opérateur => Symbole de l'opérateur
Type => Le type de données

Ex:

Public Shared Operator +(ByVal value1 As MonType, _  
                         ByVal value2 As MonType _
                         ) As MonType
    Dim retVal As New MonType
    retVal.Prop1 = Value1.Prop1 & Value2.Prop1
    Return retVal
End Operator


Cet opérateur fait une concaténation de la propriété Prop1 de l'objet MyType lors de son addition.

Tu peux les surcharger lors ce que la classe est hérité.

Attention, parfois, les opérateurs nécessitent plusieurs paramètres ou plusieurs opérateurs, comme par exemple l'opérateur '=' qui ne peut être défini seul et s'accompagne toujours de l'opérateur '<>'

Plus d'infos ici

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_pingouin84k Messages postés 68 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 9 janvier 2011
27 janv. 2010 à 12:02
Hum...

Dans mon cas j'essai de faire l'opération + avec des tableau de valeurs (je pensais que c'était le type Array, je me suis trompé apparement).

Du genre :

Dim a As Single()
Dim b As Single()

'je dimensionne mes tableaux
'je mets pleins de nombre dedans
'et j'aimerai pouvoir écrire ça :

Dim c as Single()
c = a + b

'où l'opération + aurait était définit
'justement je n'arrive pas à définir
'l'opération pour un tableau de single
0
xranto Messages postés 90 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 31 mars 2014
27 janv. 2010 à 12:25
Salut

Je pense qu'un peut de précision peut aider les gens a t'aider.

C'est du VB ca ou du VB.Net

Merci
0
cs_pingouin84k Messages postés 68 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 9 janvier 2011
27 janv. 2010 à 15:12
Tu ne peux pas modifier les opérateurs de types systèmes (tel que les string, les integer, les tableaux etc...)


Ok c'est bien domage... Bon ta solution n'est guère compliqué...

En fait je savais déjà comment ajouter des opérateurs pour une classe perso, mais j'ai jamais su s'il était possible de modifier des opérateurs pour les types systèmes.


Et pour ma seconde question... Est ce que les fonctions mathematique de la classe Math peuvent être surchargé pour être utilisé avec ma classe perso ?



C'est du VB ca ou du VB.Net


Je suis bien dans la section VB.Net et VB 2005. Il y a une différence entre les 2 ? Sinon j'utilise VB 2008 Express.
0
cs_pingouin84k Messages postés 68 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 9 janvier 2011
27 janv. 2010 à 17:02
Mayzz tu es un président !
Merci pour ton aide !
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
27 janv. 2010 à 17:24
Pas de quoi, nous sommes la pour ca, dans la mesure du possible.

++


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Rejoignez-nous