Anular un método estático en C#

Saad Aslam 12 octubre 2023
  1. Anular un método estático en C#
  2. Forma alternativa de anular un método estático en C#
Anular un método estático en C#

En este artículo, analizaremos la anulación del método estático de una clase base abstracta.

Anular un método estático en C#

Primero, no podemos anular un método estático que pertenece a una clase base abstracta. Eso no es algo que se pueda hacer en C#.

Esto se debe a que la frase estática se refiere a algo que se aplica a todos, mientras que la idea primordial es lo que utilizamos para cambiar la implementación de acuerdo con nuestros requisitos.

Cuando anulamos un método estático, perdemos la propiedad estática que viene con él. En consecuencia, los métodos estáticos en C# no se pueden anular.

Sin embargo, podemos romper las reglas y hacer la tarea en el orden contrario para cumplir con los requisitos.

Forma alternativa de anular un método estático en C#

Ocultar es una idea que se puede usar, y es posible usar. Esta idea también es importante para Early Binding y Late Binding que se utilizan al crear funciones virtuales.

Cuando las implementaciones de métodos virtuales se eligen en tiempo de ejecución en función de la instancia, esto se denomina anulación. Cuando se elige más de un método con el mismo nombre en el momento de la compilación, se conoce como sobrecarga.

La sobrecarga es más una conveniencia que un componente esencial del polimorfismo orientado a objetos.

La sobrecarga de métodos estáticos puede parecerse primero a la anulación. El compilador busca en la estructura de herencia hasta que encuentra un método coincidente si no puede ubicar un método estático en la clase proporcionada.

El método se resuelve y corrige en el momento de la compilación, lo cual es una distinción clave. Debido a que esto no es una anulación verdadera, no puede etiquetar los métodos estáticos como virtuales, anular o nuevos.

El comportamiento de un método de anulación debe respetar el principio de sustitución de Liskov (LSP). Hablando en términos más generales, el comportamiento de un método superior debe adherirse al contrato del método virtual.

Estas restricciones no se aplican a los métodos estáticos sobrecargados, que se conciben con mayor precisión como métodos distintos con el mismo nombre pero que cumplen funciones diferentes.

La palabra clave nuevo establece miembros con el mismo nombre pero diferentes acciones.

Cuando se utiliza la palabra clave nuevo, esta advertencia no aparecerá como lo haría normalmente. Además, tenga en cuenta que ni siquiera tiene que utilizar delegados para llamar a los métodos ocultos de los padres cuando lo desee; todo lo que tienes que hacer es darles sus nombres completos.

Implementación de Ocultar un Método Estático en C#

using System;

class Hi {
  static void Main() {
    C2.Calldisplay();
  }
}

class C1 {
  public static void display() {
    System.Console.WriteLine("Class 1 it is");
  }
}
class C2 : C1 {
  public static void display() {
    System.Console.WriteLine("Class 2 it is");
  }
  public static void Calldisplay() {
    display();
    C1.display();
  }
}

Producción :

Class 2 it is
Class 1 it is

El método display() es heredado de la clase C1 por la clase C2, que llamará a C1.display(). La función denominada C1.display() en la clase C2, heredada de la clase C1, llamará al método estático oculto en el padre, que es la clase C1.

El hecho de que los métodos estáticos no puedan llamarse en una instancia y deban invocarse proporcionando el nombre del tipo al que pertenecen justifica la práctica de ocultarlos, desde nuestro punto de vista. La decisión más importante a tomar sobre un método es si debe ser un método estático, un método de instancia o un método virtual.

La consecuencia de utilizar el término nuevo es que no se puede mantener el polimorfismo. Si bien puede ayudar a reinterpretar ciertos comportamientos, debemos usarlo con mucha precaución y ser muy cautelosos sobre cómo y dónde lo usamos.

Cualquiera que vea la clase base mientras invoca una propiedad redefinida obtendrá la versión anterior de la propiedad en lugar de la actual.

Es importante recordar que las clases parciales no se pueden especificar entre ensamblajes ya que esta es una restricción impuesta por el lenguaje.

En un mundo ideal, debería usarlos para particionar una clase extensa en muchos archivos (de lo contrario, podría estar haciendo algo incorrectamente). A veces puede usarlos para compartir código para facilitar el desarrollo multiplataforma (porque no todos los códigos funcionan en todas las plataformas).

Si está desarrollando para varias plataformas, en esa situación, puede utilizar esta estrategia; sin embargo, debe buscar formas alternativas de modelar sus clases. Para colmo de males, ¡es totalmente ilegible!

Cuando se utilizan clases parciales, es común que haya una búsqueda extendida de todos los componentes. Esto no hace más que dificultar que los recién llegados comprendan lo que está sucediendo.

Al hacer las cosas de esta manera, podemos completar el trabajo de anular un método estático de una clase base abstracta usando otra forma.

Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

Artículo relacionado - Csharp Method