¿Es posible la herencia múltiple en VB .Net? Si es así, ¿cuál es la sintaxis?¿Es posible la herencia múltiple en VB .Net?
Respuesta
Respuesta corta: No
respuesta Ligeramente más largo: Sí, si se hereda múltiples interfaces, y una sola clase base. Dado que esta suele ser la razón para MI (desea implementar múltiples interfaces), por lo general es suficiente. Sin embargo, en esos raros casos en que el MI "real" es útil, .NET evita que lo haga.
Es posible de forma restringida en VB.Net de la misma manera que en C#: a través de interfaces. Dado que una interfaz funciona esencialmente con una clase base puramente abstracta, puede heredar de tantas de ellas como sea necesario y de una clase real.
Probablemente lo que quieres hacer es realmente composición o agregación (ver here for design pattern). Tal vez estás definiendo un comportamiento. Siempre puede implementar una interfaz SomeInterface en la clase base, tiene un miembro de tipo SomeInterface (que le permite ser cualquier clase que implemente SomeInterface y por lo tanto puede hacer que el código implemente), en el constructor de miembros pasa una referencia a la clase base que lo posee si es necesario (si lo hace, intente agregar otra interfaz para definir las devoluciones de llamada, la clase base lo implementará y la subclase lo tendrá como tipo de variable miembro). Use llamadas a la clase miembro para implementar SomeInterface. De esta forma, el código se implementa en otra clase, lo que hace que sea fácil de mantener, pero no está haciendo herencia múltiple.
La idea detrás de la composición es que un motor no es un automóvil sino un automóvil tiene un motor. El automóvil necesita un motor, pero no necesita saber cómo funciona una unidad de motor completa, sino cómo interactuar con él. Entonces el motor no debería heredar del auto. Pero tener el auto para implementar el motor es una tontería. Entonces el automóvil obtiene un motor como miembro de todo el automóvil, pero como un objeto. El auto tiene un motor como parte de su composición.
Parece que lo que está haciendo es más un comportamiento, como un objeto de pato que tiene un comportamiento de charlatanería, pero los patos de goma son patos pero no graznan, sino chirrían. Por lo tanto, difieren de los objetos de ánade real, pero ambos tienen muchas otras características de pato en común. Entonces quieres tener una interfaz de charlatanería que cada uno implemente de manera diferente. Pero muchos patos graznarán para esta interfaz, por lo que no querrás tener que escribir cuack para cada uno. Ahí es donde usas la composición para implementar la interfaz de comportamiento del charlatanería.
Por lo que yo sé VB.net no soporta la herencia múltiple en general, pero se puede llegar a una especie de herencia múltiple mediante el trabajo con los interfaces (usando “Instrumental” en lugar de “hereda”):
Public Class ClassName
Implements BaseInterface1, BaseInterface2
End Class
Eso funciona bien para las clases pero me gustaría tener una interfaz heredando algunas interfaces base. Algo así:
Public Interface InterfaceName
Implements BaseInterface1, BaseInterface2
End Interface
Pero la palabra clave "Implements" no está permitida para las interfaces (lo que tiene sentido, por supuesto). He intentado utilizar un tipo de clase abstracta que sé de Java:
Public MustInherit Class InterfaceName
Implements BaseInterface1, BaseInterface2
End Class
Pero ahora tengo que poner en práctica los métodos definidos de BaseInterface1 y BaseInterface2 dentro de la clase InterfaceName. Pero como InterfaceName también debería ser una interfaz, no quiero tener que implementar estos métodos dentro de esa clase.
En C# se puede hacer eso muy fácil:
public interface InterfaceName: BaseInterface1, BaseInterface2 {}
- 1. ¿Es la herencia múltiple mal?
- 2. ¿Es posible declarar una constante dinámica en VB .NET?
- 3. .net Herencia múltiple de las clases abstractas
- 4. La herencia múltiple: 2Classes1Method
- 5. Python La herencia múltiple
- 6. Herencia múltiple en PHP
- 7. Herencia múltiple en ActionScript 3
- 8. Herencia múltiple en java
- 9. herencia múltiple lío
- 10. Herencia múltiple en C#
- 11. C# herencia múltiple
- 12. VB .NET vs. VB 2010
- 13. casting con la herencia múltiple
- 14. ¿Es posible evitar la herencia múltiple de clases base específicas en tiempo de compilación?
- 15. Codeigniter y Herencia Múltiple?
- 16. Herencia múltiple sin herencia múltiple y sin duplicación de código
- 17. Pregunta sobre la herencia múltiple en C++?
- 18. Herencia virtual pura, herencia múltiple, y C4505
- 19. herencia múltiple Extjs?
- 20. vb.net: la herencia múltiple en una interfaz
- 21. cómo simular la herencia múltiple en C#
- 22. Esquemas XML con herencia múltiple
- 23. C++ herencia múltiple Pregunta
- 24. Herencia de Interfaz Múltiple
- 25. C++ herencia múltiple fundición
- 26. MetaClass herencia múltiple inconsistencia
- 27. estilos herencia múltiple
- 28. C++: La herencia múltiple con polimorfismo
- 29. Herencia de clase de tipo herencia múltiple en ruby
- 30. C++ ¿Herencia múltiple con interfaces?
La herencia de una interfaz no es realmente la herencia, aunque ... –
@Orion Edwards: ¿cómo no? La herencia define la relación "es una", y las interfaces son una forma de definir qué es un objeto "es". Si heredo ISerializable, digo "Soy un ISerializable", y tratándome como un ISerializable funciona como se espera. –
Además del comentario de @Harper Shelby, una aplicación voluntaria de este tipo de restricción generalmente se considera como una mejor práctica en C++ (en lugar de interfaces, tendríamos clases base abstractas puras). – Richard