Herencia, Polimorfismo y Colecciones en C#: Conceptos Clave
Clasificado en Informática
Escrito el en español con un tamaño de 5,22 KB
1. Herencia
La herencia es el mecanismo que permite compartir automáticamente métodos y datos entre clases y subclases. Este potente mecanismo permite crear nuevas clases a partir de clases existentes, programando solamente las diferencias. La clase hija será tratada por el compilador automáticamente como si su definición incluyese la definición de la segunda – a la que se le suele llamar clase padre o clase base.
2. Palabra reservada base
en C#
C# ha incluido una palabra reservada llamada base
que devuelve una referencia al objeto actual. Esta referencia es semejante a this
, pero tiene la peculiaridad de que los accesos a ella son tratados como si el verdadero tipo fuese el de su clase base. Por lo tanto, base.listar();
es equivalente a ((circulo)this).Listar();
.
3. Upcasting
Upcasting: Las referencias de la clase base son compatibles con las referencias de las subclases.
4. Métodos Virtuales
Existen métodos que, además de la vinculación en tiempo de compilación, permiten la vinculación dinámica. Los métodos que se vinculan dinámicamente se denominan métodos virtuales. En C# la vinculación dinámica se realiza a través de las funciones virtuales. C# posee una Tabla de Métodos que contiene una dirección por cada Método Virtual definido en una clase o heredado. En C# todas las clases heredan implícitamente de la clase System.Object
, y como esta clase tiene distintos métodos virtuales (por ejemplo, ToString()
), toda la clase tiene asociados métodos virtuales en la Tabla de Métodos (TM). Así, los objetos instancias de clases, además de los datos propios de la instancia, poseen la dirección de la Tabla de Métodos desde donde se redireccionan los métodos virtuales asociados a ella.
5. Polimorfismo
El polimorfismo es la capacidad que tienen objetos de clases diferentes, relacionados mediante la herencia, a responder de forma distinta a una misma llamada de un método. Se basa en la ligadura dinámica y la herencia. Su ventaja es la reusabilidad de código.
6. Operador is
Operador is
: Este operador del lenguaje C# permite identificar en tiempo de ejecución a qué clase pertenece un objeto referenciado. Así, la expresión e is T
se evalúa verdadera si el objeto referenciado por e
pertenece a la clase T
.
7. Downcasting
Downcasting: Como las referencias de una colección de objetos son referencias a objetos de la clase base, enviar un mensaje propio de un objeto perteneciente a una subclase dará un error en tiempo de compilación. Para esto es necesario hacer la conversión explícita correspondiente a través de un cast (downcasting), sino los únicos métodos que se pueden usar son los de la clase base.
8. Clases Abstractas
Clase abstracta: La utilidad de las clases abstractas radica en que pueden contener métodos que no proporcionan una implementación, la cual se deja en manos de sus clases derivadas. Un método abstracto es un método virtual que permite declarar un comportamiento común a las subclases de la clase donde se definió, el cual será redefinido en cada una de ellas. Una clase concreta derivada de una clase abstracta debe proporcionar implementación a los métodos abstractos; para eso, el método de la subclase debe incluir el modificador override
.
9. Herencia de Object en .NET
En .NET, todos los tipos que se definan heredan implícitamente de la clase Object
predefinida en la BCL. Object
es la raíz de la jerarquía de objetos de .NET, por lo cual se dice que es la clase base directa o indirecta de todas las clases. Todas las clases heredan los siete métodos de la clase System.Object
.
10. Interfaces
Una interfaz es un conjunto de firmas de métodos, propiedades, eventos o indizadores agrupados bajo un nombre común (los miembros de una interfaz no poseen modificador de acceso, por defecto son públicos y no pueden ser estáticos). No pueden contener: atributos, operadores, constructores, destructores ni miembros estáticos. Funcionan como un conjunto de funcionalidades que luego implementan las clases. Al igual que las clases abstractas, son tipo referencia, pero no pueden crearse objetos directamente de ellas.
11. Colecciones
Una colección es un contenedor que guarda un conjunto de objetos.
- En el Framework .NET existen varias implementaciones para las colecciones.
- Además, existen interfaces estándar para enumerar, comparar y crear nuevas colecciones.
12. ArrayList
ArrayList
es similar a un arreglo, la diferencia radica en que el ArrayList
puede crecer en tiempo de ejecución. Almacena sus elementos en orden e implementa la interfaz ICollection
y además la interfaz llamada IList
.