IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Quelque chose m'échappe : comparer objets


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 128
    Points : 61
    Points
    61
    Par défaut Quelque chose m'échappe : comparer objets
    Bonjour,

    Quelque chose doit m'échapper... pas moyen de comprendre...

    Merci d'avance pour votre éclairage.

    erreur BC30452: L'opérateur '<>' n'est pas défini pour les types 'xxxxxxxxxx.ModePaiement' et 'xxxxxxxxxx.ModePaiement'.

    dois-je redéfinir chaque opérateurs ?

    J'essai de comparer 2 objets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim modePaiement As ModePaiement
    If certificat.ModePaiement <> modePaiement Then...
    J'ai ajouté dans ma classe :

    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
     
            Public Overrides Function GetHashCode() As Integer
                Return MyBase.GetHashCode()
            End Function
     
            Public Overrides Function Equals(obj As Object) As Boolean
     
                If obj Is Nothing OrElse Not [GetType]().Equals(obj.GetType()) Then
                    Return False
                End If
     
                Dim otherMyObject As ModePaiement = DirectCast(obj, ModePaiement)
                Return Me.ID = otherMyObject.ID
     
            End Function
    -----------------------------------------
    à l'origine PHP/Mysql. Pro : Asp.net/Vb/SQL/Webform siteweb

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,
    Ton problème vient probablement parce que tu n'as pas surchargé l'opérateur <>.
    Et attention, lorsqu'on surcharge un opérateur relationnel, il faut les surcharger tous, ou au moins leurs contraires : ainsi si tu as surchargé le relationnel =, tu dois surcharger aussi <>.
    Sauf erreur de ma part, le compilateur génère des erreurs pour tout manquement. C'est peut-être ce qui se passe avec ton problème.
    J'espère que ça t'aidera ...

  3. #3
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Quelques remarques
    GetType() renvoie le type concret à l'exécution en fonction du contexte (que j'ignore) il peut être préférable d'utilise TypeOf ... Is ou bien l'opérateur GetType (à ne pas confondre avec la méthode) ou pas
    Il est un peu surprenant que Equals finisse par comparer des ID alors que GetHashCode ne s'en sert pas
    Si tu pars sur une implémentation d'égalité il serait bien d'implémenter IEquatable(Of TonType) également (idem avec IComparable(Of TonType) s'il y a également notion de comparaison)
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Quelques remarques
    GetType() renvoie le type concret à l'exécution en fonction du contexte (que j'ignore) il peut être préférable d'utilise TypeOf ... Is ou bien l'opérateur GetType (à ne pas confondre avec la méthode) ou pas
    Il est un peu surprenant que Equals finisse par comparer des ID alors que GetHashCode ne s'en sert pas
    Si tu pars sur une implémentation d'égalité il serait bien d'implémenter IEquatable(Of TonType) également (idem avec IComparable(Of TonType) s'il y a également notion de comparaison)
    Bonjour,

    Le soucis c'est qui j'implémente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class ModePaiement
            Implements IEquatable(Of ModePaiement)
    Je dois overrider la fonction (j'ai directement utilisé l'intelisense)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Public Overrides Function Equals(other As ModePaiement) As Boolean Implements IEquatable(Of ModePaiement).Equals
                Throw New NotImplementedException()
            End Function
    mais une fois fais, j'ai : function 'Equals' ne peut pas être déclaré 'Overrides', car il ne se substitue pas à un function dans une classe de base.
    -----------------------------------------
    à l'origine PHP/Mysql. Pro : Asp.net/Vb/SQL/Webform siteweb

  5. #5
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Il s'agit d'Implement ...
    A ma connaissance, il ne faut pas utiliser Override pour implémenter les méthodes d'une Interface.
    Par ailleurs, si tu implémentes une méthode, tu dois les implémenter toutes, quitte à n'écrire que des procédures vides.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Interface MonInterface
      Sub UneProcedure(ByVal X As Integer)
      Function UneFonction(ByVal S As String) As Integer
      Property UnePropriete()
    End Interface
     
    Public Class UneClasse
      Implements MonInterface
      Public Sub UneProcedure(ByVal Entier As Integer) Implements MonInterface.UneProcedure ' Pas d'Override
        ' … … …
      End Sub
        ' … … …

  6. #6
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Si on en arrive à ne pas donner de corps à une méthode implémentée il faut se poser la question de pourquoi on implémente l'interface à la base ; pour moi c'est un cas qui ne devrait pas se produire (déjà que le cas consistant à lever une NotSupportedException ne m'enchante guère ...)

    Quant au code ; on peut (et doit ?) très bien faire les deux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Class Foo
        Implements IEquatable(Of Foo)
     
        Public Overrides Function Equals(obj As Object) As Boolean
            Return Equals(TryCast(obj, Foo))
        End Function
     
        Public Overloads Function Equals(other As Foo) As Boolean Implements IEquatable(Of Foo).Equals
            Return other IsNot Nothing AndAlso ' ...
        End Function
    End Class
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

Discussions similaires

  1. Quelque chose m'échappe en prog. objet
    Par Luthecia dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/09/2013, 19h08
  2. [JAAS] [EJB3] [LDAP] Sécurisation des EJB3, quelque chose m'échappe.
    Par balibalo dans le forum Java EE
    Réponses: 18
    Dernier message: 24/05/2012, 12h15
  3. [iText] width, height, quelque chose m'échappe ?
    Par garthos dans le forum Documents
    Réponses: 0
    Dernier message: 05/04/2012, 09h59
  4. DMV - quelque chose m'échappe.
    Par Philippe Robert dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/12/2010, 16h43
  5. [C#] Quelque chose m'échappe...
    Par diaboloche dans le forum Windows Forms
    Réponses: 4
    Dernier message: 25/03/2006, 19h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo