Interfaz vs clases abstractas en C#
Las clases tienen diferentes especificadores en C#. Hoy estaremos hablando de dos clases; Clases de interfaz y abstractas.
Diferencia entre clases abstractas y de interfaz en C#
Una interfaz es algo que define cómo debe funcionar algo. Es necesario proporcionar una guía o una configuración básica sobre cosas y comunicarse entre objetos.
Una interfaz solo implementa métodos o indica qué funciones se deben realizar o se requieren. Solo proporcionará la configuración básica; el resto está en la clase que lo hereda para implementar y ampliar estas funciones según sea necesario.
Entonces, si tuviéramos una clase COCHE
y una clase BICICLETA
, podrían heredar la interfaz VEHÍCULO
que podría contener funciones comunes a ambas clases (COCHE y BICICLETA)
como; get_engine_vid(), set_color()
etc. El VEHÍCULO
aquí actuaría como una interfaz.
Verá cómo una interfaz ayuda a mantener un protocolo de definición estándar dentro de las clases. Todos los métodos declarados dentro de la interfaz son y deben ser extendidos.
Código de ejemplo:
interface VEHICLE {
int get_engine();
void set_engine_id();
}
class BIKE : VEHICLE {
private : int engine_id;
BIKE() {}
}
class CAR : VEHICLE {
private : int engine_id;
CAR() {}
}
Este código mostrará un error.
Para solucionarlo, implementaremos métodos en cada clase heredada en el siguiente código.
Código fijo:
interface VEHICLE {
public int get_engine();
public void set_engine_id(int id);
}
class BIKE : VEHICLE {
private int engine_id;
BIKE() {}
public
int get_engine() {
return engine_id;
}
public void set_engine_id(int id) {
engine_id = id;
}
}
class CAR : VEHICLE {
private int engine_id;
CAR() {}
public
int get_engine() {
return engine_id;
}
public void set_engine_id(int id) {
engine_id = id;
}
}
Ahora que tiene claras las interfaces, veamos las clases abstractas en C#.
Código de ejemplo:
abstract class VEHICLE {
public abstract int get_engine();
public abstract void set_engine_id(int id);
}
class BIKE : VEHICLE {
private int engine_id;
public BIKE() {}
public
override int get_engine() {
return engine_id;
}
public override void set_engine_id(int id) {
engine_id = id;
}
}
class CAR : VEHICLE {
private int engine_id;
public CAR() {}
public
override int get_engine() {
return engine_id;
}
public override void set_engine_id(int id) {
engine_id = id;
}
}
static void Main() {
CAR n = new CAR();
n.set_engine_id(2);
Console.WriteLine("The engine id is: " + n.get_engine());
}
Puede ver cómo override
tiende a establecerse aquí para extender las funciones declaradas en la clase abstracta. Entonces cuál es la diferencia?
Las clases abstractas se usan para varias clases con la misma estructura base, pero una interfaz solo se puede usar para definir un método que se puede implementar. No es necesario usarlo para múltiples clases que pueden o no heredar dicha estructura.
Las clases abstractas también pueden definir implementaciones predeterminadas de métodos. Sin embargo, este no es el caso de las interfaces.
Debe eliminar override
para que funcione perfectamente.
Código fijo:
abstract class VEHICLE {
public int get_engine() {
Console.Write("I am here");
return -1;
}
public abstract void set_engine_id(int id);
}
// and then in the classes:
// code c#
class BIKE : VEHICLE {
private int engine_id;
public BIKE() {}
public
int get_engine() {
return engine_id;
}
public override void set_engine_id(int id) {
engine_id = id;
}
}
class CAR : VEHICLE {
private int engine_id;
public CAR() {}
public
int get_engine() {
return engine_id;
}
public override void set_engine_id(int id) {
engine_id = id;
}
}
Eso es todo para las clases e interfaces abstractas. Esperamos que comprenda las diferencias y pueda usarlo de manera eficiente como lo desee.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub