studio - polimorfismo c#
¿Cuál es la diferencia entre las herencias y los implementos en C#? (5)
Tengo el siguiente código:
public class HitController : MonoBehaviour, ICentroidHitListener
La forma en que lo entiendo. HitController hereda de MonoBehaviour e implementa los métodos en el ICentroidHitListener.
Pero, ¿cómo puedo codificar esto si solo quiero que solo implemente los métodos en el ICentroidListener? ¿Lo codifico así?
public class HitController : ICentroidHitListener
En cuyo caso parece que HitController hereda de ICentroidHitListener
"herencia" implica extender el comportamiento existente. Una interfaz no tiene ningún comportamiento, debe implementar todo el comportamiento de los métodos / propiedades definidos en la interfaz. Por lo tanto, "implementas" una interfaz y realmente no puedes heredar nada de ella.
Si hereda de otra cosa, hereda todo su comportamiento concreto. Si alguna otra clase implementa una interfaz, no tiene que implementar esa interfaz. Ahora, la clase que "implementa" esa interfaz podría hacer que una o más de esas implementaciones de interfaz sean "abstractas"; en cuyo caso, se vería obligado a implementar los miembros abstractos de la clase de la que se deriva. Pero, no tiene que implementar esa interfaz, hereda la interfaz de la base. Puede incluir la interfaz en la "lista de clases base" para el tipo derivado, pero no es necesario.
Por ese token, también "implementarías" una clase completamente abstracta. Pero, es raro que alguien use esa terminología. En su mayor parte, la "interfaz" es la sintaxis de azúcar en .NET; pero tiene soporte de nivel IL por ejemplo, una clase base completamente abstracta es semánticamente idéntica a una interfaz.
Las interfaces le permiten asegurarse de que lo único que puede hacer es definir una interfaz y no un comportamiento (una clase abstracta puede tener un comportamiento).
En general, no hay manera de diferenciar una interfaz de una clase usando la sintaxis :
Por eso es importante agregar un prefijo I
a todas sus interfaces.
El código que proporcionó, public class HitController : ICentroidHitListener
, es correcto, y los lectores de su código deberían poder deducir fácil y rápidamente que es una interfaz basada en el prefijo I
Tomado de here :
Cuando una clase o estructura implementa una interfaz, la clase o estructura proporciona una implementación para todos los miembros definidos por la interfaz. La interfaz en sí no proporciona ninguna funcionalidad que una clase o estructura pueda heredar en la forma en que se puede heredar la funcionalidad de la clase base. Sin embargo, si una clase base implementa una interfaz, la clase derivada hereda esa implementación. Se dice que la clase derivada implementa la interfaz implícitamente.
Tomado de here :
La herencia le permite crear nuevas clases que reutilizan, extienden y modifican el comportamiento que se define en otras clases. La clase cuyos miembros se heredan se llama la clase base, y la clase que hereda esos miembros se llama la clase derivada. Una clase derivada solo puede tener una clase base directa. Sin embargo, la herencia es transitiva. Si ClassC se deriva de ClassB, y ClassB se deriva de ClassA, ClassC hereda los miembros declarados en ClassB y ClassA.
En C #, a diferencia de lenguajes como C ++, no se permite la herencia múltiple , lo que significa que una clase no puede heredar de más de otra clase. A la inversa, una clase puede implementar más de una interfaz.
Eso es fácil.
Heredar es ganar características de clase base a las suyas.
Implementar es crear características de acuerdo con el protocolo especificado.
clase: clase e interfaz: interfaz es herencia,
clase: la interfaz esta implementando,
class: abstract_class están implementando y heredando.
La respuesta a lo que está preguntando es "sí", si lo entiendo correctamente.
En el primer ejemplo, está heredando de una clase base ( MonoBehavior
) e implementando una interfaz ( ICentroidHitLIstener
'').
Tiene acceso a todos los miembros de MonoBehavior
desde su clase HitController
, y su clase HitController
debe proporcionar implementación para todos los miembros definidos en la interfaz ICentroidHitListener
.
En el segundo ejemplo, solo está implementando la interfaz ICentroidHitListener
.
Si es una interfaz, implementa la interfaz. Si es una clase,: hereda de la clase.
Por HitController : ICentroidHitListener
tanto, HitController : ICentroidHitListener
es correcto.