C# | Cómo utilizar las referencias de interfaz

En C#, puede crear una variable de referencia de un tipo de interfaz o, en otras palabras, puede crear una variable de referencia de interfaz. Este tipo de variable puede referirse a cualquier objeto que implemente su interfaz. Una variable de referencia de interfaz solo conoce los métodos declarados por su declaración de interfaz. No permite acceder a otras variables o métodos que puedan ser compatibles con los objetos . Este concepto es similar cuando usa una referencia de clase principal para acceder a un objeto de clase secundaria.

A continuación se muestran los ejemplos para ilustrar el concepto de Referencias de interfaz:

Ejemplo 1:

// C# program to illustrate the 
// concept of Interface References
using System;
  
// interface declaration
public interface Race {
      
    // declaration of abstract methods of
    // interface that will be implemented 
    // by the class which inherits the interface
    void Speed(int s);
    void Distance(int d);
}
  
// class implementing interface
public class Person1 : Race {
      
    int sp1, di1;
      
    // abstract method of 
    // Race interface
    public void Speed(int p1s) {
          
        sp1 = p1s;
        Console.WriteLine("Speed Method implemented by Person1");
          
    }
      
    // abstract method of 
    // Race interface
    public void Distance(int p1d) {
          
        di1 = p1d;
        Console.WriteLine("Distance Method implemented by Person1");
          
    }
      
    // method of class Person1
    public void display1() {
          
        Console.WriteLine("The Speed of 1st person is: "+sp1);
        Console.WriteLine("The distance covered by 1st person is: "+di1);
          
    }
      
}
  
// class implementing interface
public class Person2 : Race {
      
    int sp2, di2;
      
    // abstract method of 
    // Race interface
    public void Speed(int p2s) {
          
        sp2 = p2s;
        Console.WriteLine("Speed Method implemented by Person2");
          
    }
      
    // abstract method of 
    // Race interface
    public void Distance(int p2d) {
          
        di2 = p2d;
        Console.WriteLine("Distance Method implemented by Person2");
          
    }
      
    // method of class Person2
    public void display2() {
          
        Console.WriteLine("The Speed of 2nd person is: "+sp2);
        Console.WriteLine("The distance covered by 2nd person is: "+di2);
          
    }
      
}
  
// Driver Class
public class GFG {
      
    // Main method
    public static void Main(String []args) {
          
        // creating an instance of Person1 class
        Person1 obj1 = new Person1();
          
        // creating an instance of Person2 class
        Person2 obj2 = new Person2();
          
        // creating an Reference 
        // of interface Race
        Race r;
          
        // ----- For Person1 Class ----------
          
        // assigning Person1 object 'obj1'
        // to interface Reference 'r'
        r = obj1;
          
        // Now you can access the abstract method
        // of Race interface which are implemented
        // by class Person1
        r.Speed(10);
        r.Distance(50);
  
        // if you will try to call display1() 
        // method using 'r' it will give error
        //r.display1();
          
        // calling the display1() 
        // method of Person1 Class
        obj1.display1();
          
        // ----- For Person2 Class ----------
          
        // assigning Person2 object 'obj2'
        // to interface Reference 'r'
        r = obj2;
          
        // Now you can access the abstract method
        // of Race interface which are implemented
        // by class Person2
        r.Speed(15);
        r.Distance(45);
  
        // if you will try to call display2() 
        // method using 'r' it will give error
        //r.display2();
          
        // calling the display1() 
        // method of Person1 Class
        obj2.display2();
          
    }
      
}
Producción:

Speed Method implemented by Person1
Distance Method implemented by Person1
The Speed of 1st person is: 10
The distance covered by 1st person is: 50
Speed Method implemented by Person2
Distance Method implemented by Person2
The Speed of 2nd person is: 15
The distance covered by 2nd person is: 45

Explicación: En el ejemplo anterior, tenemos una interfaz llamada Race y dos clases Person1 y Person2 que implementan los métodos de la interfaz. La clase Person1 tiene su propio método llamado display1() y la clase Person2 similar tiene su propio método display2() al que no se puede llamar usando la referencia de la interfaz. Para llamar a los métodos usando la referencia de la interfaz (aquí r es la referencia de la interfaz), debe asignarle un objeto de clase. Como si estuviera asignando el objeto obj1 de Person1 a r , es decir , r = obj1; luego llamas a Speed()y los métodos Distance() que implementa la clase Person1 . Para llamar al método display1() , debe tener que usar obj1. De manera similar, usando r = obj2; estamos llamando a métodos de la clase Person2 .

Ejemplo 2:

// C# program to illustrate the 
// concept of Interface References
using System;
  
// interface declaration
interface Vehicle {
  
    // all are the abstract methods.
    void changeGear(int a);
    void speedUp(int a);
    void applyBrakes(int a);
    void printStates();
}
  
// class implements interface
class Bicycle : Vehicle {
  
    int speed;
    int gear;
  
    // to change gear
    public void changeGear(int newGear)
    {
  
        gear = newGear;
    }
  
    // to increase speed
    public void speedUp(int increment)
    {
  
        speed = speed + increment;
    }
  
    // to decrease speed
    public void applyBrakes(int decrement)
    {
  
        speed = speed - decrement;
    }
  
    public void printStates()
    {
        Console.WriteLine("speed: " + speed + " gear: " + gear);
    }
}
  
// Driver Class
class GFG {
  
    // Main Method
    public static void Main(String[] args)
    {
  
        // creating an instance of Bicycle
        Bicycle bicycle = new Bicycle();
  
        // Creating interface references
        Vehicle obj;
  
        // assigning Bicycle object 'bicycle'
        // to interface Reference 'obj'
        obj = bicycle;
  
        // calling the abstract methods 
        // implemented by class Bicycle
        obj.changeGear(4);
        obj.speedUp(5);
        obj.applyBrakes(2);
  
        Console.WriteLine("Bicycle Present State:");
  
        // calling the method of class Bicycle 
        obj.printStates();
    }
}
Producción:

Bicycle Present State:
speed: 3 gear: 4

Explicación: En el ejemplo anterior, Vehicle es una interfaz y la clase Bicycle implementa esta interfaz. Aquí se declara que obj es una referencia a la interfaz del vehículo en el método Main(). Ahora este obj se usa para referir el objeto bicicleta de la clase Bicicleta.

Publicación traducida automáticamente

Artículo escrito por ankita_saini 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 *