Problème avec la gestion des objets dans Visual Basic 2008 Express
DESCRIPTION
J’ai créé trois objets :
Un objet interface :
Un objet abstrait qui implémente l’objet interface :Public Interface SqlInterface
Sub connexion()
End Interface
Un objet de travail qui implémente l’objet interface et hérite de l’objet Abstrait :Public MustInherit Class SqlAbstract
Implements SqlInterface
Public Sub connexion() Implements SqlInterface.connexion
Debug.Print("SqlAbstract")
End Sub
End Class
Voici quatre exécutions de mon code différentes :Public Class SqlAccess
Inherits SqlAbstract
Implements SqlInterface
Public Overloads Sub connexion()
MyBase.connexion()
Debug.Print("SqlAccess")
End Sub
End Class
1ère exécution
Code :
Résultat :Imports System.Reflection
Module ConnexionDB
Public dbSql As SqlAbstract
Public Function Connexion() As Boolean
Dim instance As Assembly = Assembly.GetExecutingAssembly()
dbSql = instance.CreateInstance("Application.SqlAccess")
dbSql.connexion()
End Function
End Module
SqlAbstract
2ème exécution
Code :
Résultat :Imports System.Reflection
Module ConnexionDB
Public dbSql As SqlInterface
Public Function Connexion() As Boolean
Dim instance As Assembly = Assembly.GetExecutingAssembly()
dbSql = instance.CreateInstance("Application.SqlAccess")
dbSql.connexion()
End Function
End Module
SqlAbstract
3ème exécution
Code :
Résultat :Imports System.Reflection
Module ConnexionDB
Public dbSql As SqlAccess
Public Function Connexion() As Boolean
Dim instance As Assembly = Assembly.GetExecutingAssembly()
dbSql = instance.CreateInstance("Application.SqlAccess")
dbSql.connexion()
End Function
End Module
SqlAccess
SqlAbstract
4ème exécution
Code :
Résultat :Imports System.Reflection
Module ConnexionDB
Public dbSql As Object
Public Function Connexion() As Boolean
Dim instance As Assembly = Assembly.GetExecutingAssembly()
dbSql = instance.CreateInstance("Application.SqlAccess")
dbSql.connexion()
End Function
End Module
SqlAccess
SqlAbstract
PROBLEME
Mon problème est que je veux pouvoir initialisé mon objet soit par SqlInterface, soit par SqlAbstract (ce qui me permettrai d’avoir les méthodes à disposition) et quand je le crée l’objet par SqlAccess il s’exécute sur le SqlAccess.connexion() et non avec SqlAbstract.connexion(). Mon exemple est avec SqlAccess, mais je pourrais bien avoir d’autre classe comme SqlOracle, etc.
Je ne trouve pas normale que l’exécution ne se fasse pas sur la méthode surclassée (cas 1 et 2).
Est-ce que j’ai créé est juste (je passe par System.Reflection.Assembly pour créer l’instance). Si non, qu’est-ce que je prendre (en sachant que le nom de la classe est une variable et non en dure).
Merci d’avance.
Partager