Classes et méthodes Abstract
C'est assez rare quand je dois utiliser ce type de classe mais ici cela m'arrangerais bien dans la librairie que je voudrais écrire.
Pour situer le problème, je voudrais écrire une librairie qui contient un objet connexion qui en fonction d'un paramètre attaque la bonne DB. Style si je lui dis de ce connecter à Access, ben ok et avec un autre objet du même type me vla partis sur Oracle.
Pour ce faire j'utilise la classe System.Data.Common.DbConnection que je dérive pour créer les différents constructeurs dont j'ai besoin.
Cette classe est une classe abstraire, donc je dois écrire le code toutes les fonctions et propriétés déclarées dans cette classe comme étant également abstraites.
Pour le constructeur cela me donne un truc du genre :
Code:
1 2 3 4 5 6 7 8
| public EmDbConnection2(EmDbTypeConnection pTypeConnection, string sFilename)
: base()
{
TypeConnection = pTypeConnection;
if (TypeConnection == EmDbTypeConnection.DBACCESS || TypeConnection == EmDbTypeConnection.DBSQLITE)
FileName = sFilename;
} |
Ce qui m'a fois n'est pas bien compliqué. EmDbTypeConnection représentant une enum contenant les différents types de Db auquel je voudrais pouvoir me connecter.
ou j'ai un peu plus de mal à comprendre comment je pourrais m'en sortir malgré les différents tuto que j'ai parcouru, c'est dans ce cas ci :
J'obtiens une liste d'erreur du même type que celle ci, ce qui est normal vu que ce sont des membres déclarés comme abstract et donc que je suis cencé implémenter :
'EmData.EmDbConnection2' n'implémente pas le membre abstract hérité 'System.Data.Common.DbConnection.BeginDbTransaction(System.Data.IsolationLevel)' D:\Dropbox\Développements\EmData\EmDbConnection2.cs 20 18 EmData
Mon problème se situe donc à ce niveau ou je voudrais donc implémenté cette propriété:
Code:
public abstract string ConnectionString
Donc je me dis je vais utilisé le mot cle override et utilisé le mot clé base pour accédé à la propriété ConnectionString de la classe de base.
Code:
1 2 3 4 5 6 7 8
|
public override string ConnectionString
{
get
{
return base.ConnectionString;
}
} |
Dans ce cas ci je ne vois pas la propriété ConnectionString dans la liste proposé par le mot clé "Base". Je me demande donc si je dois utiliser le mot clé "this" à sa place.
J'ai déjà joué avec tout cela et je dois avoué qu'après 2 ou ans je patauge un peu au redémarrage.
La solution que j'ai trouvé" jusqu'a présent pour utiliser ma classe c'est un truc du style :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
Class Toto
{
DbConnection cmd = null;
public void Open()
{
// Init de l'objet con avec les différents paramètres nécessaires
// puis l'appel de la fonction membre de ma nouvelle classe :
cmd .Open(); ... // Avec Try catch etc
}
} |
Donc en gros réécrire toute la classe en la surclassant, ce que je ne trouve pas trop propre.En sachant que j'ai également besoin des classes DbTransact, DbReader, DBadapter , etc ....
Quelqu'un pourrait il rallumé ma lanterne SVP