1

カスタム ValueType を作成しました。

Private Structure MyValueType
    Private _integerValue As Integer

    Public Sub New(initValue As Integer)
        _integerValue = initValue
    End Sub

    Public Overrides Function ToString() As String
        Return _integerValue.ToString
    End Function
End Structure

しかし、次のような値をテストする方法がわかりません。

    Dim v As New MyValueType(3)
    Dim x As New MyValueType(4)

    If v = x Then 'fails compile
        MessageBox.Show("The values are the same")
    End If

エラー:

Operator '='  is not defined for Types MyValueType and MyValueType

では、ValueType の演算子をどのように定義すればよいでしょうか (これは単純でなければならないことはわかっていますが、どこにも例が見つかりません!)。

テストしたくないことに注意してくださいIf v.Equals(x)

4

1 に答える 1

1

次の行に沿ったもの (演算子=<>演算子の両方をオーバーロードする必要があります):

Sub Main
    Dim v As New MyValueType(3)
    Dim x As New MyValueType(4)

    If v <> x Then 'fails compile
        Console.WriteLine("The values are not the same")
    End If    
End Sub

Private Structure MyValueType
    Private _integerValue As Integer

    Public Sub New(initValue As Integer)
        _integerValue = initValue
    End Sub

    Public Overrides Function ToString() As String
        Return _integerValue.ToString
    End Function

    Public Shared Operator =(
        ByVal left as MyValueType, 
        ByVal right as MyValueType) As Boolean

        If left.ToString() = right.ToString()
            Return True
        End If

        Return False   
    End Operator 

    Public Shared Operator <>(
        ByVal left as MyValueType, 
        ByVal right as MyValueType) As Boolean          

        Return Not (left = right)   
    End Operator     
End Structure

注:IEquatable(Of MyValueType)これを行うことでいくつかの利点が得られ、「ベスト プラクティス」と見なされるため、おそらく実装することをお勧めします。

于 2012-04-30T12:25:25.947 に答える