업데이트:
2008년 7월
값 형식이나 클래스에서 해당 인스턴스의 순서를 지정하거나 인스턴스를 정렬하기 위해 구현하는 일반화된 형식별 비교 메서드를 정의합니다.
네임스페이스:
System
어셈블리:
mscorlib(mscorlib.dll)
<ComVisibleAttribute(True)> _
Public Interface IComparable
Dim instance As IComparable
[ComVisibleAttribute(true)]
public interface IComparable
[ComVisibleAttribute(true)]
public interface class IComparable
/** @attribute ComVisibleAttribute(true) */
public interface IComparable
public interface IComparable
이 인터페이스는 값의 순서를 지정하거나 값을 정렬할 수 있는 형식에서 구현합니다. 이 인터페이스를 구현하는 형식은 정렬 순서에서 현재 인스턴스의 위치가 같은 형식의 두 번째 개체보다 앞인지 뒤인지 아니면 동일한지를 나타내는 CompareTo라는 단일 메서드를 정의해야 합니다. Array..::.Sort 및 ArrayList..::.Sort 등의 메서드는 인스턴스의 IComparable 구현을 자동으로 호출합니다.
Int32 및 Double 등의 모든 숫자 형식은 IComparable을 구현하며 String, Char 및 DateTime도 마찬가지입니다. 사용자 지정 형식에서도 IComparable을 직접 구현해야 개체 인스턴스의 순서를 지정하거나 인스턴스를 정렬할 수 있습니다.
다음 코드 예제에서는 필수 CompareTo 메서드와 IComparable의 구현을 보여 줍니다.
Imports System.Collections
Public Class Temperature
Implements IComparable
' The temperature value
Protected temperatureF As Double
Public Overloads Function CompareTo(ByVal obj As Object) As Integer _
Implements IComparable.CompareTo
If TypeOf obj Is Temperature Then
Dim otherTemperature As Temperature = DirectCast(obj, Temperature)
Return Me.temperatureF.CompareTo(otherTemperature.temperatureF)
Else
Throw New ArgumentException("Object is not a Temperature")
End If
End Function
Public Property Fahrenheit() As Double
Get
Return temperatureF
End Get
Set(ByVal Value As Double)
Me.temperatureF = Value
End Set
End Property
Public Property Celsius() As Double
Get
Return (temperatureF - 32) * (5/9)
End Get
Set(ByVal Value As Double)
Me.temperatureF = (Value * 9/5) + 32
End Set
End Property
End Class
Public Module CompareTemperatures
Public Sub Main()
Dim temperatures As New ArrayList
' Initialize random number generator.
Dim rnd As New Random()
' Generate 10 temperatures between 0 and 100 randomly.
For ctr As Integer = 1 To 10
Dim degrees As Integer = rnd.Next(0, 100)
Dim temp As New Temperature
temp.Fahrenheit = degrees
temperatures.Add(temp)
Next
' Sort ArrayList.
temperatures.Sort()
For Each temp As Temperature In temperatures
Console.WriteLine(temp.Fahrenheit)
Next
End Sub
End Module
' The example displays the following output to the console (individual
' values may vary because they are randomly generated):
' 2
' 7
' 16
' 17
' 31
' 37
' 58
' 66
' 72
' 95
using System;
using System.Collections;
public class Temperature : IComparable
{
// The temperature value
protected double temperatureF;
public int CompareTo(object obj) {
if(obj is Temperature)
{
Temperature otherTemperature = (Temperature) obj;
return this.temperatureF.CompareTo(otherTemperature.temperatureF);
}
else
{
throw new ArgumentException("Object is not a Temperature");
}
}
public double Fahrenheit
{
get
{
return this.temperatureF;
}
set {
this.temperatureF = value;
}
}
public double Celsius
{
get
{
return (this.temperatureF - 32) * (5/9);
}
set
{
this.temperatureF = (value * 9/5) + 32;
}
}
}
public class CompareTemperatures
{
public static void Main()
{
ArrayList temperatures = new ArrayList();
// Initialize random number generator.
Random rnd = new Random();
// Generate 10 temperatures between 0 and 100 randomly.
for (int ctr = 1; ctr <= 10; ctr++)
{
int degrees = rnd.Next(0, 100);
Temperature temp = new Temperature();
temp.Fahrenheit = degrees;
temperatures.Add(temp);
}
// Sort ArrayList.
temperatures.Sort();
foreach (Temperature temp in temperatures)
Console.WriteLine(temp.Fahrenheit);
}
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
// 2
// 7
// 16
// 17
// 31
// 37
// 58
// 66
// 72
// 95
using namespace System;
using namespace System::Collections;
public ref class Temperature: public IComparable {
/// <summary>
/// IComparable.CompareTo implementation.
/// </summary>
protected:
// The value holder
Double m_value;
public:
virtual Int32 CompareTo( Object^ obj ) {
if ( obj->GetType() == Temperature::typeid ) {
Temperature^ temp = dynamic_cast<Temperature^>(obj);
return m_value.CompareTo( temp->m_value );
}
throw gcnew ArgumentException( "object is not a Temperature" );
}
property Double Value {
Double get() {
return m_value;
}
void set( Double value ) {
m_value = value;
}
}
property Double Celsius {
Double get() {
return (m_value - 32) / 1.8;
}
void set( Double value ) {
m_value = (value * 1.8) + 32;
}
}
};
int main()
{
ArrayList^ temperatures = gcnew ArrayList;
// Initialize random number generator.
Random^ rnd = gcnew Random;
// Generate 10 temperatures between 0 and 100 randomly.
for (int ctr = 1; ctr <= 10; ctr++)
{
int degrees = rnd->Next(0, 100);
Temperature^ temp = gcnew Temperature;
temp->Value = degrees;
temperatures->Add(temp);
}
// Sort ArrayList.
temperatures->Sort();
for each (Temperature^ temp in temperatures)
Console::WriteLine(temp->Value);
return 0;
}
// The example displays the following output to the console (individual
// values may vary because they are randomly generated):
// 2
// 7
// 16
// 17
// 31
// 37
// 58
// 66
// 72
// 95
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360
.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.
.NET Framework
3.5, 3.0, 2.0, 1.1, 1.0에서 지원
.NET Compact Framework
3.5, 2.0, 1.0에서 지원
XNA Framework
2.0, 1.0에서 지원
참조
날짜
|
변경 내용
|
원인
|
|---|
2008년 7월
|
공용 언어 런타임에서 사용하는 방법에 대한 세부 정보 및 구현자 정보가 추가되었습니다.
|
고객 의견
|