ℹ️ ¿Qué son las Interfaces en C#?
Las interfaces en C# son un conjunto de métodos, propiedades y eventos que un tipo de datos debe implementar. Las interfaces se utilizan para definir un contrato que debe ser cumplido por cualquier tipo de datos que la implemente.
📝 Ventajas de las Interfaces en C#
- Permiten la herencia múltiple: un tipo de datos puede implementar múltiples interfaces.
- Permiten la polimorfismo: un tipo de datos puede ser tratado como cualquier otro tipo de datos que implemente la misma interfaz.
- Mejoran la reutilización del código: al definir un contrato, se puede reutilizar el código en diferentes partes del programa.

🖥️ Código fuente (ejemplo)
Interface
public interface IDamageable
{
float Health { get; set; }
void TakeDamage(float amount);
}
Uso Interface
public class Enemy : IDamageable
{
public float Health { get; set; } = 100f;
public void TakeDamage(float amount)
{
Health -= amount;
// Lógica específica del enemigo (parpadear en rojo, reproducir sonido, etc.)
}
}
public class DestructibleCrate : IDamageable
{
public float Health { get; set; } = 25f;
public void TakeDamage(float amount)
{
Health -= amount;
// Lógica específica de la caja (romperse en trozos)
}
}
ℹ️ ¿Qué son los Generics en C#?
Los genéricos en C# son una forma de reutilizar el código al definir un tipo de datos que puede ser reemplazado por cualquier otro tipo de datos.
📝 Ventajas de las Interfaces en C#
- Permiten la reutilización del código: al definir un tipo de datos que puede ser reemplazado, se puede reutilizar el código en diferentes partes del programa.
- Mejoran la seguridad del código: al definir un tipo de datos que puede ser reemplazado, se puede evitar la utilización de tipos de datos no seguros.
- Mejoran la performance del código: al definir un tipo de datos que puede ser reemplazado, se puede evitar la creación de tipos de datos no necesarios.

🖥️ Código fuente (ejemplo)
public class InventorySlot<T>
{
public T Item { get; set; }
public int Quantity { get; set; }
public InventorySlot(T item, int quantity)
{
Item = item;
Quantity = quantity;
}
}
// Uso práctico:
// Puedes crear un espacio para armas
InventorySlot<Weapon> weaponSlot = new InventorySlot<Weapon>(new Weapon("Espada de fuego"), 1);
// O un espacio para pociones de salud sin duplicar código
InventorySlot<Potion> potionSlot = new InventorySlot<Potion>(new Potion("Poción Roja"), 5);