Inicio Noticias Deep C # - Herencia

Deep C # – Herencia

Página 1 de 3

Ineritance – ¿es donde todo sale mal? Descúbrelo en este extracto de mi nuevo libro, Deep C #: Dive Into Modern C #.

Hacer # profundo

Compre ahora en Amazon

Lista de capítulos

Por qué#? I Mecanografiado fuerte y seguridad de mecanografiado fuerte
Extraer porque tipado fuerte
Extracción de valor y referencia. Estructuras y clases de valor y referencia.
Extraer la herencia de estructuras y clases.
Extraer herencia *** ¡NUEVO!
Interfaces y herencia múltiple Control de herencia II Casting y genéricos Casting: el escape de la escritura ruidosa Genéricos Genéricos avanzados Anónimos y dinámicos

Mecanografía

III Funciones delegadas Multicast Delega métodos anónimos, Lambda y cierres IV Subprocesos asíncronos, actividad y bloque El patrón Invoke Async Await Los datos ForV paralelos – LINQ, XML y expresiones regulares El principio LINQ XML LINQ To XML Expresiones regulares VI Inseguro e interoperabilidad COM personalizado Punteros de atributos para estructuras avanzadas de manipulación de bits

Material extra

Herencia

La herencia es una idea simple, siempre y cuando no intente hacer uso de ella. ¿Qué es un método virtual? ¿Cómo se usa anular y nuevo? Es difícil cuando miras los detalles. También están todas las preguntas filosóficas sobre qué hace que un buen código sea mantenible. En este capítulo veremos los conceptos básicos de la herencia y los rincones sutiles de la idea.

Herencia simple

Los mecanismos de herencia de C # son particularmente simples y limpios, pero asegurémonos de que sabe cómo funcionan.

La declaración de clase fundamental en C # toma la forma:

nombre de clase: clase base

Si no especifica una clase base, se usa la clase predeterminada denominada objeto.

Solo una clase puede heredar y solo de otra clase: las estructuras siempre heredan del objeto y no se pueden usar para crear nuevas estructuras o clases por herencia. Si desea crear una clase que no se pueda usar como clase base para una nueva clase, simplemente agregue el modificador sellado al comienzo de la definición de la clase; consulte el Capítulo 7.

Tenga en cuenta que C # solo permite la herencia única que, a diferencia de C ++ y Python, es un alivio. Si cree que la capacidad de C ++ para crear clases a partir de más de una clase base es una buena idea, entonces no ha visto algunas de las cosas raras que pueden suceder cuando esta poderosa estructura se sale de control. El enfoque preferido para la herencia múltiple es utilizar interfaces que definan el tipo de lo que se heredará sin proporcionar una implementación. No hay duda de que la herencia única es más segura y puede hacer todo lo que puede hacer la herencia múltiple si está listo para abordarla correctamente y hacer un trabajo adicional.

Tipo de variable y tipo de objeto

Como ya hemos visto, cuando crea una instancia de una clase, primero crea una variable de referencia del tipo correcto. Por ejemplo:

class MyClassA {};
MyClassA MyA;

no crea una instancia de MyClassA, solo una variable de referencia capaz de apuntar a un objeto de tipo MyClassA. Debe tener cuidado con la forma en que expresa este «apunta a un objeto» porque C # no tiene punteros como tal.

Después de declarar una variable de referencia, puede configurarla para que apunte a, o haga referencia a, una nueva instancia de la clase usando:

MyA = new MyClassA ();

o poniendo esto junto:

MyClassA MyA = new MyClassA ();

Tenga en cuenta que aquí suceden dos cosas: el tipo de variable a la que se refiere y el tipo de objeto al que se refiere. En un mundo simple, siempre serían los mismos.

Si ahora crea una clase que hereda de MyClassA:

Clase MyClassB: MyClassA;

por lo tanto, cualquier instancia de MyClassB comienza con todos los métodos definidos en la definición de MyClassA. De esto se trata la herencia: reutilización de código. Si la clase MyClassA tiene un método show, ahora la clase MyClassB también y sin que tengas que escribir una sola línea de código.

Tenga en cuenta que esto significa que la clase MyClassB tiene dos tipos de métodos: los que se definen como parte de MyClassA y los que se definen dentro de ella.

Si solo desea usar los métodos heredados de la clase MyClassB, puede usarlos como si fueran «nativos» de MyClassB.

Por ejemplo:

MyClassBMyB = new MyClassB ();
MyB.show ();

resulta en llamar al método show definido en la clase MyClassA.

Hay una pequeña complicación: ¿qué pasa si los métodos de la clase MyClassB tienen que llamar a los métodos definidos en la clase MyClassA? Uno de los beneficios de la herencia única es que si desea llamar a métodos de clase base, puede hacerlo con una sola palabra clave base porque no necesita especificar qué clase base debe usarse, ya que solo hay una. Por ejemplo, si MyClassB hereda un método «show» de MyClassA, MyClassB puede llamar al método usando:

base.show ();

En la práctica, puede omitir la base siempre que no haya ambigüedad, es decir, si MyClassB no tiene un método show.

Marc Gomez
Vine a por tabaco y ya me quedé aquí. Cuando no estoy en el sótano de Tecnopasion suelo pasear por las calles de Barcelona.
RELATED ARTICLES