IComparable.CompareTo メソッド
現在のインスタンスを同じ型の別のオブジェクトと比較します。
Function CompareTo( _
ByVal obj As Object _) As Integer
[C#]
int CompareTo(
objectobj);
[C++]
int CompareTo(
Object* obj);
[JScript]
function CompareTo(
obj : Object) : int;
パラメータ
- obj
このインスタンスと比較するオブジェクト。
戻り値
比較対象オブジェクトの相対順序を示す 32 ビット符号付き整数。戻り値の意味は次のとおりです。
値 | 説明 |
---|---|
0 より小さい値 | このインスタンスは obj よりも小さくなっています。 |
0 | このインスタンスは obj と等価です。 |
0 より大きい値 | このインスタンスは obj よりも大きくなっています。 |
例外
例外の種類 | 条件 |
---|---|
ArgumentException | obj の型がこのインスタンスの型と異なります。 |
解説
このメソッドは定義するだけなので、実際に使用する場合は、特定のクラスや値で実装する必要があります。比較における "より小さい"、"等価"、および "より大きい" の意味は、個別の実装によって異なります。
定義により、すべてのオブジェクトは null 参照 (Visual Basic では Nothing) よりも大きく、また 2 つの null 参照は互いに等しくなります。
obj パラメータは、このインターフェイスを実装するクラスまたは値型と同じ型である必要があります。それ以外の場合は、 ArgumentException がスローされます。
実装時の注意: 任意のオブジェクト A、B、C について、次の条件が満たされる必要があります。
A.CompareTo(A)
は 0 を返す必要があります。
A.CompareTo(B)
が 0 を返す場合は、 B.CompareTo(A)
も 0 を返す必要があります。
A.CompareTo(B)
が 0 を返し、 B.CompareTo(C)
が 0 を返す場合は、 A.CompareTo(C)
も 0 を返す必要があります。
A.CompareTo(B)
が 0 以外の値を返す場合、 B.CompareTo(A)
は反対の符号の値を返す必要があります。
A.CompareTo(B)
が 0 でない値 x を返し、 B.CompareTo(C)
が x と同じ符号の値 y を返す場合、 A.CompareTo(C)
は x および y と同じ符号の値を返す必要があります。
呼び出し時の注意: CompareTo メソッドを使用して、クラスのインスタンスの順序を決定します。
使用例
[Visual Basic, C#, C++] CompareTo を使用して、 IComparable を実装している Temperature オブジェクトを別のオブジェクトと比較する方法については、次のコード例を参照してください。
Public Class Temperature
Implements IComparable
Public Overloads Function CompareTo(ByVal obj As Object) As Integer _
Implements IComparable.CompareTo
If TypeOf obj Is Temperature Then
Dim temp As Temperature = CType(obj, Temperature)
Return m_value.CompareTo(temp.m_value)
End If
Throw New ArgumentException("object is not a Temperature")
End Function
' The value holder
Protected m_value As Integer
Public Property Value() As Integer
Get
Return m_value
End Get
Set(ByVal Value As Integer)
m_value = Value
End Set
End Property
Public Property Celsius() As Integer
Get
Return (m_value - 32) / 2
End Get
Set(ByVal Value As Integer)
m_value = Value * 2 + 32
End Set
End Property
End Class
[C#]
public class Temperature : IComparable {
/// <summary>
/// IComparable.CompareTo implementation.
/// </summary>
public int CompareTo(object obj) {
if(obj is Temperature) {
Temperature temp = (Temperature) obj;
return m_value.CompareTo(temp.m_value);
}
throw new ArgumentException("object is not a Temperature");
}
// The value holder
protected int m_value;
public int Value {
get {
return m_value;
}
set {
m_value = value;
}
}
public int Celsius {
get {
return (m_value-32)/2;
}
set {
m_value = value*2+32;
}
}
}
[C++]
public __gc class Temperature : public IComparable {
/// <summary>
/// IComparable.CompareTo implementation.
/// </summary>
protected:
// The value holder
Double m_value;
public:
Int32 CompareTo(Object* obj) {
if(obj->GetType() == __typeof(Temperature)) {
Temperature* temp = dynamic_cast<Temperature*>(obj);
return m_value.CompareTo(__box(temp->m_value));
}
throw new ArgumentException("object is not a Temperature");
}
__property Double get_Value() {
return m_value;
}
__property void set_Value(Double value) {
m_value = value;
}
__property Double get_Celsius() {
return (m_value-32)/1.8;
}
__property void set_Celsius(Double value) {
m_value = value*1.8 + 32;
}
};
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard
参照
IComparable インターフェイス | IComparable メンバ | System 名前空間 | Object