IComparable 유형 정렬 인터페이스

//요약:
//유형에 특정된 일반적인 비교 방법을 정의하고 값 유형이나 클래스는 이 방법을 통해 실례를 정렬한다.
    [ComVisible(true)]
    public interface IComparable
    {
//요약:
//현재 인스턴스를 동일한 유형의 다른 객체와 비교하고 현재 실을 나타내는 정수를 반환합니다.
//예제 정렬 순서의 위치가 다른 대상의 앞, 뒤에 있는지 아니면 그 위치와 같은지.
       //
//매개변수:
       //  obj:
//이 인스턴스와 비교할 객체
       //
//결과를 반환합니다.
//비교할 객체의 상대 순서를 나타내는 값.반환 값의 의미는 다음과 같다. 값의 의미는 0보다 작고 이 실례는//obj보다 작다.0 이 실례는 obj와 같다.0보다 크면 obj보다 크다.
       //
//예외:
       //  System.ArgumentException:
//obj에는 이 인스턴스와 같은 유형이 없습니다.
        int CompareTo(object obj);
    }
참고:
이 인터페이스는 정렬 가능한 값을 가진 형식으로 이루어집니다.이것은 현재 실례가 정렬 순서에 있는 위치가 같은 유형의 다른 대상 앞에 있는지, 뒤에 있는지, 아니면 그 위치와 같은지를 표시하는 단일 방법인 CompareTo(Object)를 실현해야 한다.인스턴스의 IComparable 구현은 Array.Sort 및 Array List.Sort 등의 메서드가 자동으로 호출됩니다.CompareTo(Object) 방법의 실현은 세 가지 값 중 하나인 Int32로 돌아가야 한다. 아래 표와 같다.
예제 코드: (공식 개발 문서)
using System;
using System.Collections;
public class Temperature : IComparable 
{    // The temperature value
    protected double temperatureF;    
    public int CompareTo(object obj) {        
        if (obj == null) return 1;
        Temperature otherTemperature = obj as Temperature;        
        if (otherTemperature != null) 
            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.0/9);
        }        
        set 
        {            
            this.temperatureF = (value * 9.0/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

궁금한 점이 있으면 공식 개발자 문서를 참고하세요!

좋은 웹페이지 즐겨찾기