Métodos en C#: Resumen de Técnicas Avanzadas

Estas son notas de estudio sobre diferentes métodos en C#:

【1】Métodos Virtuales -- virtual (como una abeja)

Propósito: Permiten que las clases hijas/clases derivadas los redefinan para implementar funcionalidades diferentes.

Característica: Facilita el mantenimiento.

【2】Métodos de Sobrescritura -- override

【3】Métodos Abstractos -- abstract (como un perezoso grande)

Definición: Deben estar en una clase abstracta, no pueden usar 'new' y carecen de implementación (cuerpo del método).

Uso: Son obligatorios y deben ser implementados por las clases que heredan.

Diferencias entre métodos abstractos e interfaces:

  1. Las clases abstractas permiten herencia simple, mientras que las interfaces permiten hernecia múltiple.
  2. Las clases abstractas pueden contener métodos regulares y virtuales, mientras que las interfaces solo definen especificaciones sin implementación.

Casos de uso:

  1. Clases abstractas: Para elementos que no cambian con frecuencia y tienen un alcance amplio, como "Persona" -> "Hombre" -> "Mujer".
  2. Interfaces: Para especificaciones que pueden cambiar con frecuencia.

【4】Métodos de Extensión -- ExtendMethod

Definición: Amplian la funcionalidad existente sin modificar el código fuente (clases o métodos).

Se implementan como métodos estáticos en clases estáticas.

Casos de uso:

  1. Extender objetos, propiedades o métodos de clases selladas.
  2. Extender interfaces.
  3. Programación en cadena con LINQ.

I. Métodos de Extensión

  1. Aplicación de métodos de extensión: Ampliando métodos de clases selladas

【1】Clase sellada:

namespace _016_Extensiones
{
    /// <summary>
    /// Supongamos que esta clase proviene de otra fuente, no es de nuestra autoría
    /// </summary>
    public sealed class Usuario
    {
        public string Nombre { get; set; }
        public int Edad { get; set; }
        public string Telefono { get; set; }

        /// <summary>
        /// Devuelve el número de teléfono
        /// </summary>
        /// <returns></returns>
        public string ObtenerTelefono()
        {
            return Telefono;
        }
    }
}

【2】Agregando un método de extensión a la clase Usuario

namespace _016_Extensiones
{
    /// <summary>
    /// Definición de una clase estática
    /// </summary>
    public static class ExtensionUsuario
    {
        /// <summary>
        /// Creación de un método estático
        /// </summary>
        public static void MostrarTelefono(this Usuario usuario)// this + tipo a extender: añade MostrarTelefono como método de extensión para Usuario
        {
            Console.Write("Resultado del método de extensión: ");
            string numero = usuario.ObtenerTelefono();
            Console.WriteLine(numero);            
        }
    }
}

【3】Uso en el programa principal

            Usuario usuario = new Usuario()
            {
                Edad = 30,
                Nombre = "maria",
                Telefono = "0987654321",
            };

            usuario.MostrarTelefono();// Ahora Usuario tiene el método MostrarTelefono

Resultado:

【4】Resumen de la definición de clases selladas

  1. Aplicación de métodos de extensión: Extensión de interfaces

【1】Definición de una interfaz

namespace _016_Extensiones
{
    public interface IOperacionesMatematicas
    {
        int Sumar(int a, int b);
    }
}

【2】Métodos de extensión para la interfaz

namespace _016_Extensiones
{
    public static class ExtensionInterfaz 
    {
        public static int Multiplicar(this IOperacionesMatematicas operaciones, int a, int b)
        {
            return a * b;
        }

        public static int Dividir(this IOperacionesMatematicas operaciones, int a, int b)
        {
            return a / b;
        }
        
        public static int Restar(this IOperacionesMatematicas operaciones, int a, int b)
        {
            return a - b;
        }
    }
}

【3】Clase que implementa la interfaz

namespace _016_Extensiones
{
    public class CalculadoraBasica : IOperacionesMatematicas
    {
        public int Sumar(int a, int b)
        {
            return a + b;
        }
    }
}

namespace _016_Extensiones
{
    public class CalculadoraAvanzada : IOperacionesMatematicas
    {
        public int Sumar(int a, int b)
        {
            return a + b;
        }
    }
}

【4】Uso en el programa principal

            CalculadoraBasica basica = new CalculadoraBasica();
            int resultado1 = basica.Sumar(5, 3);// método de la interfaz
            int resultado2 = basica.Multiplicar(5, 3);// método de extensión
            Console.WriteLine($"Resultado del método de interfaz: {resultado1}, Resultado del método de extensión: {resultado2}");

            CalculadoraAvanzada avanzada = new CalculadoraAvanzada();
            int resultado3 = avanzada.Sumar(10, 5);// método de la interfaz
            int resultado4 = avanzada.Dividir(10, 5);// método de extensión
            Console.WriteLine($"Resultado del método de interfaz: {resultado3}, Resultado del método de extensión: {resultado4}");

Resultado:

El contenido está incompleto, continuará...

Etiquetas: C# métodos virtuales métodos abstractos métodos de extensión Programación Orientada a Objetos

Publicado el 6-22 19:26