Programa C# para implementar la interfaz IComparable

C# proporciona una interfaz IComparable. Esta interfaz proporciona diferentes tipos de métodos de comparación específicos del tipo, lo que significa que un tipo de valor o una clase pueden implementar esta interfaz para ordenar sus instancias porque no podemos ordenar las instancias de una clase directamente porque el compilador no sabe sobre qué base ordenar. De manera similar, comparar directamente dos instancias arrojará un error del compilador ya que el compilador se confunde sobre qué comparar.

Sintaxis:

interfaz pública IComparable

La implementación de la interfaz IComparable requiere:

  • Agregar un método CompareTo() que recibe un objeto y devuelve un número entero.
  • El objeto entrante primero se convierte en tipo como el tipo de clase y se almacena en una variable temporal. Luego se compara con una propiedad del método actual.
  • El método CompareTo() dependiendo de la comparación:
    • devuelve 0, si la propiedad de la instancia actual es igual a la propiedad de la variable temporal
    • devuelve 1, si la propiedad de la instancia actual es mayor que la propiedad de la variable temporal
    • devuelve -1, si la propiedad de la instancia actual es menor que la propiedad de la variable temporal

Ahora analicemos cómo implementar la interfaz IComparable con la ayuda del siguiente ejemplo.

Ejemplo: A continuación se muestra la implementación de la interfaz IComparable. en este ejemplo clasificamos a los empleados según su ID de empleado.

C#

// C# program to demonstrate how to
// implement IComparable interface 
using System;
using System.Collections.Generic;
  
class GFG{
  
// Driver code
static public void Main()
{
      
    // Create an array of employees 
    // using collection initializer
    Employee[] employees = new Employee[]
    {
        new Employee(1, "Susmita"),
        new Employee(5, "Soniya"),
        new Employee(3, "Rohit"),
        new Employee(2, "Mohit"),
        new Employee(4, "Pihu")
    };
      
    // Displaying the employee's array before sorting
    Console.WriteLine("Before sorting employees array");
    foreach(var emp in employees)
    {
          Console.WriteLine("ID - {0}, Employee Name - {1}", 
                            emp.ID, emp.EmployeeName);
    }
      
    // Sorts the employees array in ascending 
    // order on basis of id of the employee
    Array.Sort(employees);   
        
    Console.WriteLine();
        
    // Printing the employee's array after sorting
    Console.WriteLine("After sorting employees array");
    foreach(var emp in employees)
    {
          Console.WriteLine("ID - {0}, Employee Name - {1}",  
                            emp.ID, emp.EmployeeName);
    }
}
}
  
// Implementing IComparable interface
public class Employee : IComparable{
      
public int ID;
public string EmployeeName;
  
// Employee constructor
public Employee(int id, string employeename)
{
    this.ID = id;
    this.EmployeeName = employeename;
}
  
// Implementation of the CompareTo() method which takes
// an object as an input and return integer value depending on
// the comparison between current object and incoming object,
public int CompareTo(object incomingobject)
{
      
      // Storing incoming object in temp variable of 
      // current class type
      Employee incomingemployee = incomingobject as Employee;
    
      return this.ID.CompareTo(incomingemployee.ID);
}
}

Producción:

Before sorting employees array
ID - 1, Employee Name - Susmita
ID - 5, Employee Name - Soniya
ID - 3, Employee Name - Rohit
ID - 2, Employee Name - Mohit
ID - 4, Employee Name - Pihu

After sorting employees array
ID - 1, Employee Name - Susmita
ID - 2, Employee Name - Mohit
ID - 3, Employee Name - Rohit
ID - 4, Employee Name - Pihu
ID - 5, Employee Name - Soniya

Publicación traducida automáticamente

Artículo escrito por biswalashish1997 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *