0

私の質問は私の一般的な理解のためのものです。それは問題ではありません。以下は私のプロジェクトのデモクラスです。

    Public Class Registration
        Inherits HumanBase

        Private _NameeValue As HumanName
        Property Namee As HumanName
            Get
                Return _NameeValue
            End Get
            Set(ByVal Value As HumanName)
                If Not _NameeValue = Value Then
                    _NameeValue = Value
                    OnPropertyChanged("Namee")
                End If
            End Set
        End Property
        Private _UserPasswordValue As String
        Public Property UserPassword() As String
            Get
                Return _UserPasswordValue
            End Get
            Set(ByVal value As String)
                If Not _UserPasswordValue.Equals(value) Then
                    _UserPasswordValue = value
                    OnPropertyChanged("UserPassword")
                End If
            End Set
        End Property

        Private _UserEmailValue As String
        Public Property UserEmail() As String
            Get
                Return _UserEmailValue
            End Get
            Set(ByVal value As String)
                If Not _UserEmailValue = value Then
                    _UserEmailValue = value
                    OnPropertyChanged("UserEmail")
                End If

            End Set
        End Property

        Property UserPassword2 As String
    End Class
Public Class HumanName
        Inherits HumanBase
        Implements IComparable(Of HumanName)
        Implements IEqualityComparer(Of HumanName)



#Region "Private Variables"
        Private _TitleNameValue As CommonTypes.TitleName
        Private _FirstNameValue As String
        Private _MiddleNameValue As String
        Private _LastNameValue As String
        Private _SuffixNameValue As CommonTypes.Suffixname
#End Region

#Region "Property Variables"
        Property TitleName As CommonTypes.TitleName
            Get
                Return _TitleNameValue
            End Get
            Set(ByVal Value As CommonTypes.TitleName)
                If Not _TitleNameValue = Value Then
                    _TitleNameValue = Value
                    OnPropertyChanged("TitleName")
                End If
            End Set
        End Property
        Property FirstName As String
            Get
                Return _FirstNameValue
            End Get
            Set(ByVal Value As String)
                If Not _FirstNameValue = Value Then
                    _FirstNameValue = Value
                    OnPropertyChanged("FirstName")
                End If
            End Set
        End Property
        Property MiddleName As String
            Get
                Return _MiddleNameValue
            End Get
            Set(ByVal Value As String)
                If Not _MiddleNameValue = Value Then
                    _MiddleNameValue = Value
                    OnPropertyChanged("MiddleName")
                End If
            End Set
        End Property
        Property LastName As String
            Get
                Return _LastNameValue
            End Get
            Set(ByVal Value As String)
                If Not _LastNameValue = Value Then
                    _LastNameValue = Value
                    OnPropertyChanged("LastName")
                End If
            End Set
        End Property
        Property SuffixName As CommonTypes.Suffixname
            Get
                Return _SuffixNameValue
            End Get
            Set(ByVal Value As CommonTypes.Suffixname)
                If Not _SuffixNameValue = Value Then
                    _SuffixNameValue = Value
                    OnPropertyChanged("SuffixName")
                End If
            End Set
        End Property
#End Region

        Public Function CompareTo(ByVal other As HumanName) As Integer Implements System.IComparable(Of HumanName).CompareTo
            Return True
        End Function

        Public Function Equals1(ByVal x As HumanName, ByVal y As HumanName) As Boolean Implements System.Collections.Generic.IEqualityComparer(Of HumanName).Equals
            Return True
        End Function

        Public Function GetHashCode1(ByVal obj As HumanName) As Integer Implements System.Collections.Generic.IEqualityComparer(Of HumanName).GetHashCode
            Return True
        End Function
    End Class

コード自体のコーディング時に " If Not _NameeValue = Value Then" でエラーが発生し、エラーはError Operator '=' is not defined for types 'SharesCommCodeLib.Human.HumanName' and 'SharesCommCodeLib.Human.HumanName'です。

ICOMPAREABLE と IEquitableComparer の両方を実装したときに '=" が機能しない理由を教えてください. DotNet はそれを演算子のオーバーロードと見なしませんか.

ありがとうございました。

4

1 に答える 1

0
  1. OPTION STRICTオンに設定することを強くお勧めします。BooleanシグネチャIntegerが戻り型として定義しているメソッドからを返そうとしても、コードはコンパイルされません。エラーを回避するのに役立ちます
  2. インターフェイスは、独自の同等性の定義を定義するために使用され、このIEqualityComparerインターフェイスを使用して同等性を指定する場合は常に使用できます。たとえば、、またはのコンストラクターで使用できHashtableますNameValueCollectionOrderedDictionary
  3. カスタムタイプで演算子を使用する場合は、オーバーロード=する必要があります。

Public Shared Operator =(ByVal humanName1 As HumanName, ByVal humanName2 As HumanName) As Boolean
    Return humanName1._FirstNameValue.Equals(humanName2._FirstNameValue) AndAlso _
        humanName1._MiddleNameValue.Equals(humanName2._MiddleNameValue) AndAlso _
        humanName1._LastNameValue.Equals(humanName2._LastNameValue)
End Operator

Public Shared Operator <>(ByVal humanName1 As HumanName, ByVal humanName2 As HumanName) As Boolean
    Return Not humanName1 = humanName2
End Operator
于 2012-12-28T19:56:00.437 に答える