Makale numarası: 320727 - Son Gözden Geçirme: 30 Temmuz 2008 Çarşamba - Gözden geçirme: 3.1

ıcomparable ve IComparer arabirimleri Visual C# içinde nasıl kullanılır?

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu adım adım makalede, iki arabirim kullanımı anlatılmaktadır: IComparer ve ıcomparable. Bu arabirimler, iki nedenden aynı makalesinde ele alınmıştır. Bu arabirimler sık birlikte kullanılır ve arabirimlerin benzer (ve benzer adlara sahip), ancak bunlar farklı amaçlara hizmet eder.

Bir dizi IComparer destekleyen türleri (örneğin, dize veya tamsay?) varsa, tüm açık IComparer başvurusu girmeden bu dizi sıralayabilirsiniz. Bu durumda, dizi öğelerinin IComparer (Comparer.Default) varsayılan uygulanması için atama. Ancak özel nesneleriniz için sıralama ve karşılaştırma olanağı sağlamak, ya da ikisinden bu arabirimlerden birini uygulaması gerekir.

Bu makalede, aşağıdaki .NET Framework sınıf kitaplığı ad alanına başvurulmaktadır:
System.Collections

Icomparable

Icomparable rolünü, belirli bir türdeki iki nesne'i karşılaştırmanın bir yöntemidir sağlamaktır. Bu işlem, nesne için herhangi bir sipariş verme yeteneği sağlamak istiyorsanız gereklidir. ıcomparable nesneleriniz için varsayılan bir sıralama düzeni sağlayan olarak düşünün. Örneğin, türünüzü nesnelerinin bir dizisi olan ve bu dizi üzerinde sıralama yöntemini çağırmak, ıcomparable nesnelerin Karşılaştırma sırasında sıralama sağlar. Aşağıdaki şekilde ıcomparable arabirimini uygulayan, CompareTo yöntemi uygulamalıdır:
// Implement IComparable CompareTo method - provide default sort order.
int IComparable.CompareTo(object obj)
{
   car c=(car)obj;
   return String.Compare(this.make,c.make);

}
				
yöntemi Karşılaştırmada karşılaştırılan değer veri türüne bağlı olarak farklıdır. String.Compare bu örnekte, bir dize karşılaştırma için seçtiğiniz özelliği olduğu için kullanılır.

IComparer

IComparer rolünü ek karşılaştırma düzenekleri sağlamaktır. Örneğin, birkaç alanlarını veya özelliklerini sınıfınızın sipariş sağlamak artan ve azalan aynı alan veya her ikisini de isteyebilirsiniz.

IComparer kullanarak iki adımlı bir işlemdir. Ilk IComparer uygulayan bir sınıf bildirmek ve daha sonra karşılaştırma yöntemi uygulamak:
private class sortYearAscendingHelper : IComparer
{
   int IComparer.Compare(object a, object b)
   {
      car c1=(car)a;
      car c2=(car)b;
      if (c1.year > c2.year)
         return 1;
      if (c1.year < c2.year)
         return -1;
      else
         return 0;
   }
}
				
Not IComparer.Compare yöntemi üçüncül karşılaştırma. 1, 0 ya da -1 gerektiren bir değer büyük, eşit veya küçük diğerinden olup olmadığına bağımlı olarak döndürülür. Sıralama düzenini (artan veya azalan) mantıksal işleçlerle bu yöntemde geçiş yaparak değiştirilebilir.

Ikinci adım, bilgisayarınızın IComparer nesnesinin bir kopyas?n? döndüren bir yöntem bildirmektir:
public static IComparer sortYearAscending()
{      
   return (IComparer) new sortYearAscendingHelper();
}
				
bu örnekte, ikinci bağımsız değişken yüklenmiş Array.Sort yöntemini çağırdığınızda IComparer kabul nesne kullanılır. Dizilerinin kullanımını IComparer sınırlandırılmamıştır. Bir bağımsız değişken bir dizi farklı tahsilat ve Denetim sınıfları olarak kabul edilir.

Adım adım örnek

Aşağıdaki örnekte, bu arabirimler kullanımını gösterir. IComparer ve ıcomparable göstermek için <a0></a0>, araba adında bir sınıf oluşturulur. Araba nesnesi ve Yıl özellikleri vardır. Artan bir sıralama alanı yapmak için etkin ıcomparable arabirimini ve olun azalan bir sıralama alanı IComparer arabiriminden etkin. Artan hem sıralar azalan, IComparer <a2>Yıl</a2> özelliği için sağlanır.
  1. Visual C# ile yeni bir konsol uygulaması) projesi oluşturun. ConsoleEnum uygulamanın adı.
  2. Program.cs Host.cs olarak yeniden adlandırın ve sonra bu kodu aşağıdaki kodla değiştirin.

    Not Visual Studio .NET 2003'te Class1.cs Host.cs olarak yeniden adlandırın.
    using System;
    
    namespace ConsoleEnum
    {
       class host
       {
          [STAThread]
          static void Main(string[] args)
          {
             // Create an arary of car objects.      
             car[] arrayOfCars= new car[6]
             {
                new car("Ford",1992),
                new car("Fiat",1988),
                new car("Buick",1932),
                new car("Ford",1932),
                new car("Dodge",1999),
                new car("Honda",1977)
             };
          
             // Write out a header for the output.
             Console.WriteLine("Array - Unsorted\n");
    
             foreach(car c in arrayOfCars)
                Console.WriteLine(c.Make + "\t\t" + c.Year);
          
             // Demo IComparable by sorting array with "default" sort order.
             Array.Sort(arrayOfCars);
             Console.WriteLine("\nArray - Sorted by Make (Ascending - IComparable)\n");
    
             foreach(car c in arrayOfCars)
                Console.WriteLine(c.Make + "\t\t" + c.Year);
    
             // Demo ascending sort of numeric value with IComparer.
             Array.Sort(arrayOfCars,car.sortYearAscending());
             Console.WriteLine("\nArray - Sorted by Year (Ascending - IComparer)\n");
    
             foreach(car c in arrayOfCars)
                Console.WriteLine(c.Make + "\t\t" + c.Year);
    
             // Demo descending sort of string value with IComparer.
             Array.Sort(arrayOfCars,car.sortMakeDescending());
             Console.WriteLine("\nArray - Sorted by Make (Descending - IComparer)\n");
    
             foreach(car c in arrayOfCars)
                Console.WriteLine(c.Make + "\t\t" + c.Year);
    
             // Demo descending sort of numeric value using IComparer.
             Array.Sort(arrayOfCars,car.sortYearDescending());
             Console.WriteLine("\nArray - Sorted by Year (Descending - IComparer)\n");
    
             foreach(car c in arrayOfCars)
                Console.WriteLine(c.Make + "\t\t" + c.Year);
         
             Console.ReadLine();
          }
       }
    }
    					
  3. Bir sınıf projeye ekleyin. Araba sınıfı adı.
  4. Car.cs kodu aşağıdaki ile Değiştir:
    using System;
    using System.Collections;
    namespace ConsoleEnum
    {   
       public class car : IComparable
       {      
          // Beginning of nested classes.
    
          // Nested class to do ascending sort on year property.
          private class sortYearAscendingHelper: IComparer
          {
             int IComparer.Compare(object a, object b)
             {
                car c1=(car)a;
                car c2=(car)b;
    
                if (c1.year > c2.year)
                   return 1;
    
                if (c1.year < c2.year)
                   return -1;
    
                else
                   return 0;
             }
          }
    
          // Nested class to do descending sort on year property.
          private class sortYearDescendingHelper: IComparer
          {
             int IComparer.Compare(object a, object b)
             {
                car c1=(car)a;
                car c2=(car)b;
    
                if (c1.year < c2.year)
                   return 1;
    
                if (c1.year > c2.year)
                   return -1;
    
                else
                   return 0;
             }
          }
    
          // Nested class to do descending sort on make property.
          private class sortMakeDescendingHelper: IComparer
          {
             int IComparer.Compare(object a, object b)
             {
                car c1=(car)a;
                car c2=(car)b;
                 return String.Compare(c2.make,c1.make);
             }
          }
    
          // End of nested classes.
    
          private int year;
          private string make;
            
          public car(string Make,int Year)
          {
             make=Make;
             year=Year;
          }
    
          public int Year
          {
             get  {return year;}
             set {year=value;}
          }
    
          public string Make
          {
             get {return make;}
             set {make=value;}
          }
    
          // Implement IComparable CompareTo to provide default sort order.
          int IComparable.CompareTo(object obj)
          {
             car c=(car)obj;
             return String.Compare(this.make,c.make);
          }
    
          // Method to return IComparer object for sort helper.
          public static IComparer sortYearAscending()
          {      
             return (IComparer) new sortYearAscendingHelper();
          }
    
          // Method to return IComparer object for sort helper.
          public static IComparer sortYearDescending()
          {      
             return (IComparer) new sortYearDescendingHelper();
          }
    
          // Method to return IComparer object for sort helper.
          public static IComparer sortMakeDescending()
          {      
            return (IComparer) new sortMakeDescendingHelper();
          }
    
       }
    }
    					
  5. Projeyi çalıştırın. Konsol penceresinde aşağıdaki çıktıyı görüntülenir:
    Array - Unsorted
    
    Ford            1992
    Fiat            1988
    Buick           1932
    Ford            1932
    Dodge           1999
    Honda           1977
    
    Array - Sorted by Make (Ascending - IComparable)
    
    Buick           1932
    Dodge           1999
    Fiat            1988
    Ford            1932
    Ford            1992
    Honda           1977
    
    Array - Sorted by Year (Ascending - IComparer)
    
    Ford            1932
    Buick           1932
    Honda           1977
    Fiat            1988
    Ford            1992
    Dodge           1999
    
    Array - Sorted by Make (Descending - IComparer)
    
    Honda           1977
    Ford            1932
    Ford            1992
    Fiat            1988
    Dodge           1999
    Buick           1932
    
    Array - Sorted by Year (Descending - IComparer)
    
    Dodge           1999
    Ford            1992
    Fiat            1988
    Honda           1977
    Buick           1932
    Ford            1932
    					

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005 Express Edition
Anahtar Kelimeler: 
kbmt kbsweptvs2008 kbhowtomaster KB320727 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:320727  (http://support.microsoft.com/kb/320727/en-us/ )