Diferencia entre clase abstracta e interfaz en C#

Una clase abstracta es una forma de lograr la abstracción en C#. Una clase abstracta nunca está destinada a ser instanciada directamente. Esta clase debe contener al menos un método abstracto, que está marcado por la palabra clave o el modificador abstracto en la definición de la clase. Las clases abstractas se utilizan normalmente para definir una clase base en la jerarquía de clases.

Ejemplo:

// C# program to illustrate the
// concept of abstract class
using System;
  
// abstract class 'G'
public abstract class G {
  
    // abstract method 'gfg1()'
    public abstract void gfg1();
}
  
// class 'G' inherit
// in child class 'G1'
public class G1 : G {
  
    // abstract method 'gfg1()'
    // declare here with
    // 'override' keyword
    public override void gfg1()
    {
        Console.WriteLine("Class name is G1");
    }
}
  
// class 'G' inherit in
// another child class 'G2'
public class G2 : G {
  
    // same as the previous class
    public override void gfg1()
    {
        Console.WriteLine("Class name is  G2");
    }
}
  
// Driver Class
public class main_method {
  
    // Main Method
    public static void Main()
    {
  
        // 'obj' is object of class
        // 'G' class '
        // G' cannot
        // be instantiate
        G obj;
  
        // instantiate class 'G1'
        obj = new G1();
  
        // call 'gfg1()' of class 'G1'
        obj.gfg1();
  
        // instantiate class 'G2'
        obj = new G2();
  
        // call 'gfg1()' of class 'G2'
        obj.gfg1();
    }
}

Producción :

Class name is G1
Class name is  G2

Al igual que una clase, la interfaz puede tener métodos, propiedades, eventos e indexadores como miembros. Pero las interfaces contendrán solo la declaración de los miembros. La implementación de los miembros de la interfaz estará dada por la clase que implementa la interfaz implícita o explícitamente.

Ejemplo:

// C# program to illustrate the
// concept of interface
using System;
  
// A simple interface
interface interface1 {
  
    // method having only declaration
    // not definition
    void show();
}
  
// A class that implements the interface.
class MyClass : interface1 {
  
    // providing the body part of function
    public void show()
    {
        Console.WriteLine("Welcome to GeeksforGeeks!!!");
    }
  
    // Main Method
    public static void Main(String[] args)
    {
  
        // Creating object
        MyClass obj1 = new MyClass();
  
        // calling method
        obj1.show();
    }
}

Producción:

Welcome to GeeksforGeeks!!!

Diferencia entre clase abstracta e interfaz

Clase abstracta Interfaz
Contiene tanto la declaración como la parte de definición. Contiene sólo una parte de declaración.
La herencia múltiple no se logra mediante una clase abstracta. La herencia múltiple se logra por interfaz.
Contiene constructor . No contiene constructor .
Puede contener miembros estáticos. No contiene miembros estáticos.
Puede contener diferentes tipos de modificadores de acceso como público, privado, protegido, etc. Solo contiene modificador de acceso público porque todo en la interfaz es público.
El rendimiento de una clase abstracta es rápido. El rendimiento de la interfaz es lento porque requiere tiempo para buscar el método real en la clase correspondiente.
Se utiliza para implementar la identidad central de la clase. Se utiliza para implementar habilidades periféricas de clase.
Una clase solo puede usar una clase abstracta. Una clase puede usar varias interfaces.
Si muchas implementaciones son del mismo tipo y usan un comportamiento común, entonces es mejor usar una clase abstracta. Si muchas implementaciones solo comparten métodos, entonces es mejor usar Interface.
La clase abstracta puede contener métodos, campos, constantes, etc. La interfaz solo puede contener métodos, propiedades, indexadores, eventos.
Puede ser implementado total, parcialmente o no. Debe implementarse en su totalidad.

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 *