Declarar un método no heredable o final

21 marzo, 2008 por Juan Dejar una respuesta »

Para aquellos programadores que llegan a .Net de la mano de PHP o Java, verán algo diferente el hecho de heredar métodos de clases. Cuando heredamos una clase en Java o PHP los métodos se sobrescriben redeclarándolos en la clase hija y cuando queremos evitar que una clase hija implemente un método, lo establecemos con la palabra reservada final.

Por ejemplo PHP se utilizaría para evitar la herencia:

public final function miMetodoNoHeredable() {
   //Codigo del metodo
}

En el caso de java es muy similar:

public final void miMetodoNoHeredable() {
   //Codigo del metodo
}

Pero en .Net aunque la base sigue siendo la misma es algo diferente. Para heredar un método, debemos de declarar el método como virtual y para declarar un método como final, usaremos la sentencia sealed (NotOverridable en VB). Para hacer un símil podríamos decir que la palabra reservada final de Java o PHP equivale en cierta medida a la sealed (NotOverridable en VB) de .Net.

Hay que apuntar que por defecto los métodos declarados en .Net son sealed, así que para heredarlos deberemos de declararlos como virtual e indicar a sus hijos que los métodos son override para que sobrescriban los valores del padre.

El caso de .net

// Ejemplo de C#
public sealed void miMetodoNoHeredable() {
   //Codigo del metodo
}
'Ejemplo de Visual Basic .Net o VB.Net
Public NotOverridable Sub miMetodoNoHeredable()
   'Codigo del metodo
End Sub
Publicidad

3 comentarios

  1. lee-sensei dice:

    Gracias lo necesitaba!

  2. Anonimo dice:

    Se te ha ido la pinza un poco. La unica forma (que conozco) de declarar un metodo, campo o propiedad, 100% no heredable es declararlo privado (private). virtual y override se utilizan para declarar metodos que permitan a sus herederos sobrescribir el codigo. En cuanto a sealed, es cierto que indica el final de virtual.

  3. Juan dice:

    Hola Anonimo, creo que eres tu quien no lo ha entendido bien, ya que explico como forzarlos a sealed. Un método privado y por tanto cerrado a su clase no es accesible desde el hijo, lo que pretendía explicar era como poder acceder desde un hijo a ese método padre sin poder sobreescribirlo. En cualquier caso, si algo estuviera mal, sería el título de la entrada.

Deja un comentario