jueves, 4 de junio de 2009

Clases virtuales y visibilidad

Clases virtuales y visibilidad

Se puede hacer que una clase derivada cambie la implementación de un método de una clase base, manteniendo el nombre del método.

A esta operación de reimplementar un método de una clase base en una clase derivada se le conoce como remplazar (override) el método de la clase base.

Los métodos de la clase base que usan la palabra clave virtual reciben el nombre de métodos virtuales y los de la clase derivada que usan la palabra clave override reciben el nombre de métodos de reeemplazo.

Si no existe un modificador virtual , se dice que el método es un método no virtual.

Para lograr el remplazo deben cumplirse dos requisitos:

  1. El método de la clase base debe declararse con la palabra clave virtual.
  2. El método de la clase derivada debe declararse con la palabra clave override.

La implementación de un método no virtual es invariable. La implementación es la misma tanto si se invoca un método en una instancia de la clase en la que se declaró o en una instancia de una clase derivada. En cambio, la implementación de un método virtual se puede sustituir por clases derivadas. El proceso de sustitución de la implementación de un método virtual heredado es conocido como reemplazamiento del método.

Cuando se invoca a un método virtual, el tipo del objeto se comprueba en tiempo de ejecución para ver si existe un miembro de reemplazo y se realiza una llamada al miembro de reemplazo que está en la clase de mayor derivación, el cual puede ser el miembro original, para ver si no existe ninguna clase derivada que haya reemplazado el miembro.

De forma predeterminada, los métodos son no virtuales. No se puede reemplazar un método no virtual.

El modificador virtual no se puede utilizar con los siguientes modificadores:

static

abstract

override

Las propiedades virtuales funcionan como los métodos abstractos, salvo en lo que se refiere a las diferencias en la sintaxis de las declaraciones e invocaciones.

  • Es incorrecto utilizar el modificador virtual en una propiedad estática.
  • Una propiedad virtual heredada se puede reemplazar en una clase derivada si se incluye una declaración de propiedad que use el modificador override .

Las clases que tienen métodos virtuales son instanciables, esto es, se pueden construir objetos de esas clases.

Para la visibilidad, se maneja la palabra reservada Override, la cual sirve para redefinir un método de alguna otra clase, utilizando el método que se sobrecarga, y escondiendo el método anterior, se le llama también sobrecarga de métodos, y al sobrecargar un método, se “sobrescribe” el método anterior con los atributos del método nuevo.

He aquí un pedazo de código, que demuestra como se manejan las clases virtuales y las sobrecargas o visibilidad

Ejemplo:

// ReempMet.cs : Ejemplifica el reemplazamiento de métodos en clases derivadas.

using C=System.Console;

class A
{

public virtual void x( )
{

Console.WriteLine( "A.x" ) ;

}

}

class B : A
{

public override void x( )
{

Console.WriteLine( "B.x" ) ;

}

}

class Principal
{

static void Main ( )
{

A objeto1 = new A( ) ;

B objeto2 = new B( ) ;

objeto1.x( ) ;

objeto2.x( ) ;

}

}

1 comentario: