¿Qué es la interfaz en C# con ejemplo?

⚡ Resumen inteligente

Interfaz en C# define un contracque especifica qué métodos y propiedades debe implementar una clase, sin proporcionar el código real. La clase implementadora proporciona el comportamiento concreto, lo que permite un acoplamiento flexible y la herencia múltiple entre tipos no relacionados.

  • 🔗 Contract: Una interfaz declara las firmas de los métodos y propiedades que debe definir cada clase que la implemente.
  • Sin implementación: Una interfaz solo contiene declaraciones, por lo que la clase escribe el código del método propiamente dicho.
  • 🔑 Palabra clave: La palabra clave interface crea el tipo, y una clase utiliza dos puntos para implementarlo.
  • 🔀 Interfaces múltiples: Una misma clase puede implementar muchas interfaces, lo que confiere a C# una forma de herencia múltiple.
  • Interfaz vs abstracclase t: Las interfaces definen el comportamiento solamente, mientras que los abstracLas clases t también pueden contener estado y código compartidos.
  • 🤖 Asistencia de IA: GitHub Copilot genera interfaces e implementaciones, y las canalizaciones de ML.NET se basan en transformadores basados ​​en interfaces.tracTs

Interfaz en C#

¿Qué es la interfaz en C#?

An Fácil de usar en C# se utiliza junto con una clase para definir un contracSe trata de un acuerdo sobre lo que la clase proporcionará a una aplicación. La interfaz define las operaciones que una clase puede realizar. Una interfaz declara las propiedades y los métodos. La clase es quien define con precisión la función del método.

Veamos un ejemplo de una interfaz cambiando las clases en nuestra aplicación de Consola. Tenga en cuenta que no ejecutaremos el código porque no hay nada que se pueda ejecutar mediante una interfaz.

Ejemplo de interfaz C#

Vamos a crear una clase de interfaz. La clase se llamará “Guru99Interface.” Nuestra clase principal extenderá la interfaz definida. Todo el código debe escribirse en el archivo Program.cs.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 interface IGuru99Interface
 {
  void SetTutorial(int pID, string pName);
  String GetTutorial();
 }

 class Guru99Tutorial : IGuru99Interface
 {
  protected int TutorialID;
  protected string TutorialName;

  public void SetTutorial(int pID, string pName)
  {
   TutorialID = pID;
   TutorialName = pName;
  }

  public String GetTutorial()
  {
   return TutorialName;
  }

  static void Main(string[] args)
  {
   Guru99Tutorial pTutor = new Guru99Tutorial();

   pTutor.SetTutorial(1,".Net by Guru99");

   Console.WriteLine(pTutor.GetTutorial());

   Console.ReadKey();
  }
 }
}

Code Explicación:-

Aquí explicamos las secciones importantes del código.

Ejemplo de interfaz C#

  1. Primero definimos una interfaz llamada “Guru99Interfaz”. Tenga en cuenta que la palabra clave “interfaz” se utiliza para definir una interfaz.
  2. A continuación, definimos los métodos que utilizará nuestra interfaz. En este caso, definimos los mismos métodos que se utilizan en todos los ejemplos anteriores. Tenga en cuenta que una interfaz solo declara los métodos, no define el código que contienen.
  3. Luego hacemos nuestro GuruLa clase 99Tutorial extiende la interfaz. Aquí es donde escribimos el código que define los distintos métodos declarados en la interfaz. Este tipo de codificación logra lo siguiente:
    • Garantiza que la clase, Guru99Tutorial solo agrega el código necesario para los métodos “SetTutorial” y “GetTutorial”, y nada más.
    • También garantiza que la interfaz se comporte como un contract. los clase tiene que acatar el contratotract. Entonces, si el contracSi dice que debe tener dos métodos llamados “SetTutorial” y “GetTutorial”, entonces así es como debe ser.

Interfaz C# vs. AbstracClase t

Una pregunta común para los principiantes es en qué se diferencia una interfaz de C# de una abstracclase tAmbos definen una contracque otros tipos siguen, pero sirven a objetivos de diseño diferentes.

Las principales diferencias se enumeran a continuación:

  • Implementación: Una interfaz contiene solo declaraciones, mientras que un abstracLa clase t puede proporcionar ambos abstracmiembros y métodos completamente implementados.
  • Herencia múltiple: Una clase puede implementar muchas interfaces, pero solo puede heredar una.tracclase t.
  • Localidad: Un abstracUna clase puede contener campos, constructores y propiedades con datos, mientras que una interfaz no puede almacenar el estado de la instancia.
  • Modificadores de acceso: AbstracLos miembros de la clase t pueden ser públicos, protegidos o privados, mientras que los miembros de la interfaz clásica son implícitamente públicos.
  • Caso de uso: Utilice una interfaz para agregar una capacidad a través de tipos no relacionados y un abstracLa clase t permite compartir código común entre tipos estrechamente relacionados.

En resumen, una interfaz describe lo que una clase puede hacer, mientras que un abstracLa clase t también puede definir parte de cómo se hace.

Cómo implementar múltiples interfaces en C#

A diferencia de la herencia de clases, C# permite que una sola clase implemente más de una interfaz. De esta manera, el lenguaje ofrece una forma segura de herencia múltiple sin la ambigüedad que surge al heredar varias clases base a la vez.

Para implementar varias interfaces, enumérelas después del nombre de la clase y sepárelas con una coma. La clase deberá definir entonces cada método declarado en cada interfaz que implemente.

Paso 1) Declara dos interfaces, cada una con su propio método.

Paso 2) Crea una clase que implemente ambas interfaces, separando los nombres de las interfaces con una coma.

Paso 3) Proporcione un cuerpo de método para cada miembro declarado en cada interfaz.

El siguiente ejemplo muestra una clase Document que implementa tanto un IReadable y una interfaz IWritable.

using System;
namespace DemoApplication
{
 interface IReadable
 {
  void Read();
 }
 interface IWritable
 {
  void Write();
 }
 class Document : IReadable, IWritable
 {
  public void Read()
  {
   Console.WriteLine("Reading the document");
  }
  public void Write()
  {
   Console.WriteLine("Writing to the document");
  }
  static void Main(string[] args)
  {
   Document doc = new Document();
   doc.Read();
   doc.Write();
   Console.ReadKey();
  }
 }
}

Code Explicación:-

  1. Declaramos dos interfaces, IReadable y IWritable. Cada interfaz declara un único método sin cuerpo.
  2. La clase Document enumera ambas interfaces después de los dos puntos, separadas por una coma, por lo que acepta respetar ambas.tracTs
  3. La clase define entonces los métodos de lectura y escritura. Saltarping Cualquiera de los dos métodos provocaría un error de compilación.
  4. El método Main crea un objeto Document y llama a ambos métodos, demostrando que la clase cumple con las dos interfaces.

Cuando se ejecuta el programa, imprime Leyendo el documento en la primera línea y Escribiendo en el documento en la segunda línea. Este patrón mantiene cada contracEs pequeño y específico, lo que hace que la clase Document sea más fácil de probar y extender.

Ventajas de usar interfaces en C#

Las interfaces se utilizan ampliamente en proyectos profesionales de C# porque hacen que el código sea flexible y más fácil de mantener. Te permiten programar de acuerdo a un estándar.tract en lugar de a una clase concreta.

Las principales ventajas incluyen:

  • Bajo acoplamiento: Code Depende de la interfaz, no de una clase específica, por lo que una implementación puede cambiar sin afectar a quienes la utilizan.
  • Herencia múltiple: Una clase puede heredar el comportamiento de varias interfaces, algo que la herencia de clases simple no permite.
  • Testabilidad: Las interfaces simplifican el intercambio de una clase real por un objeto simulado durante las pruebas unitarias.
  • Inyección de dependencia: Los frameworks inyectan una implementación de interfaz en tiempo de ejecución, una idea fundamental detrás de los principios SOLID.
  • Consistencia: Cada clase implementadora se ve obligada a proporcionar el mismo conjunto de miembros, lo que mantiene la API predecible.

Debido a estas ventajas, las interfaces constituyen la base de la mayoría de los patrones de diseño y marcos de aplicación modernos de C#.

Preguntas Frecuentes

Por convención, el nombre de una interfaz de C# comienza con la letra I mayúscula, como IDisposable o IReadableEl prefijo I indica instantáneamente que el tipo es una interfaz en lugar de una clase o estructura.

Antes de C# 8.0, una interfaz solo contenía declaraciones. A partir de C# 8.0, los métodos de interfaz predeterminados permiten que una interfaz proporcione un cuerpo de método, de modo que las implementaciones antiguas siguen funcionando cuando se agregan nuevos miembros.

La implementación explícita nombra a un miembro con su prefijo de interfaz, como por ejemplo IReadable.Leer. El miembro solo se puede invocar a través de una referencia de interfaz, lo que evita conflictos de nombres cuando dos interfaces declaran el mismo método.

Sí. Una interfaz puede heredar de una o más interfaces. Una clase que implementa la interfaz hija debe entonces definir todos los métodos tanto de la interfaz hija como de todas las interfaces padre heredadas.

No. Una interfaz no se puede instanciar directamente porque no tiene implementación. Se crea un objeto de una clase que implementa la interfaz y luego se hace referencia a ese objeto a través del tipo de interfaz.

Sí. Los miembros de una interfaz clásica son implícitamente públicos y no se les pueden añadir modificadores de acceso. La clase que implementa la interfaz también debe declarar los miembros correspondientes como públicos.

Sí. GitHub Copilot puede generar una interfaz, sugerir las firmas de sus métodos y generar una clase que la implemente a partir de un comentario breve o del nombre de la interfaz, lo que acelera el proceso.tracdesarrollo t-primero.

ML.NET se basa en interfaces como ITransformer e IDataView para definir su canalización de aprendizaje automático. Codificar contra estas interfacestracts te permite intercambiar modelos y fuentes de datos sin tener que reescribir el código de entrenamiento circundante.

Resumir este post con: