2

私は自分のコードで FxCop を実行しており、Operator =関数を所有しているが.Equals. 忠実な仲間として、私はこれらを修正しようと努力していますが、問題が発生しました。私はこのように構造を作成しました:-

Public Structure MyStruct

    Public my_innards As Integer

    Public Shared Operator =(ByVal fs As MyStruct, ByVal ss As MyStruct) As Boolean
        Return fs.my_innards = ss.my_innards
    End Operator

    Public Shared Operator <>(ByVal fs As MyStruct, ByVal ss As MyStruct) As Boolean
        Return fs.my_innards <> ss.my_innards
    End Operator

End Structure

そして、私は次のように演算子をオーバーライドしようとします.Equals:-

Public Overrides Function Equals(ByVal ss As MyStruct) As Boolean
    Return Me.my_innards = ss.my_innards
End Function

これにより、コンパイルエラーが発生しますfunction 'Equals' cannot be declared 'Overrides' because it does not override a function in a base structure

しかし、私が試してみると:-

Public Function Equals (ByVal ss As MyStruct) As Boolean
    Return Me.my_innards = ss.my_innards
End Function

これにより、警告が生成されますfunction 'Equals' shadows an overridable method in the base class 'ValueType'. To override the base method, this method must be declared 'Overrides'

つまり、メソッドを として宣言する必要があり、宣言しない場合もありoverridesます。誰でもこれで私を助けることができますか?

4

1 に答える 1

4

関数パラメーターをObject次のように指定する必要があります。

Public Structure MyStruct

    Public Property Test As Integer

    Public Overrides Function Equals(obj As Object) As Boolean
        If obj Is GetType(MyStruct) Then
            Return Test = CType(obj, MyStruct).Test
        End If
        Return False
    End Function

End Structure

ただし、標準の比較動作で何かが変わるかどうかはわかりませんStructure。構造体内のすべての値がデフォルトで比較されます。

于 2013-02-26T15:51:30.530 に答える