|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 518 ![]() |
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 :
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 Code :
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 :
Quelqu'un pourrait il rallumé ma lanterne SVP |
||||||
|
00
|
|
|
#2 | ||
![]() ![]() Rémy MainilIT Analyst & Software Developer Inscription : juin 2002 Messages : 1 022 ![]() |
Bonjour,
En fait, je pense que ce que tu t'y prends mal pour ce que tu cherches à faire... Je pense que plutôt que chercher à dériver la classe DBConnection, tu devrais faire en sorte que ta classe retourne un objet DBConnection dont c'est l'utilité première. Exemple : Code :
__________________
Si ton problème a une solution, rien ne sert de t'inquiéter.. Si il n'en a pas, t'inquiéter ne sert à rien Ma Page |
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 518 ![]() |
En fait tu vas dans le sens de ma réflexion.
En effet ma classe connexion fait ce que tu dis la. Mais je pense que j'ai voulu aller trop loin en essayant de réécrire toutes les classes (donc DBReader, DbAdapter, DbCommand) alors que finalement il suffisait que j'utilise ces classes dans mes applications principales, mais juste en passant par une classe dérivée pour DBConnexion. |
|
00
|
|
|
#4 |
|
Membre Expert
![]() John DoeDéveloppeur .NET Inscription : novembre 2010 Messages : 911 ![]() |
Bonjour,
tu n'es pas obligé de tout rendre abstrait, si tu veux pouvoir surchargé des éléments de ta classe de base tu peux utiliser virtual (le faite d'utiliser abstract t'empêchera d'y accéder depuis une classe qui en hérite étant donné qu'elle n'est pas sensé avoir été implémenté dans la classe mère). Donc dans ta classe de base utilise: Code :
public virtual string ConnectionString { get; set; } |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 518 ![]() |
Bonjour,
Tout à fait d'accord, mon plus gros problème est que la classe DbConnexion fait partie du Framework donc je ne l'ai pas créée. Ce qui m’intéressait à la base c'est de pas me retapé les ProviderFactory dans toutes mes applications. L'erreur que j'ai faite et d'avoir voulu réécrire (en dérivant) les autres objets du style DbCommand etc etc ... |
|
00
|
|
|
#6 | ||||
|
Membre Expert
![]() John DoeDéveloppeur .NET Inscription : novembre 2010 Messages : 911 ![]() |
tu peux faire un peu comme j'ai fais pour initialiser mon contexte EnttityFramework sur mon appli avec une connection string passée en paramètre
Classe de base: Code :
Code :
|
||||
|
|
00
|
|
|
#7 |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 280 ![]() |
Bonjour,
Je crois que tu fait une erreur sur les classes abstraite, elle doivent contenir au MINIMUM une méthode abstraite.... Concernant le this ou base, je te conseil la lecture du modificateur "virtual" http://msdn.microsoft.com/fr-fr/libr...=vs.80%29.aspx Ensuite pour te faciliter la tache concernant l'instanciation de telle ou telle implémentation un petit tour du coté du design pattern "abstract Factorie" devrait t'aider En francais Cordialement
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
10
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() François Chef de projet NTIC Inscription : janvier 2007 Messages : 6 555 ![]() |
Citation:
__________________
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça... Une réponse vous a aidé ? utiliser le bouton "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel |
|
|
|
10
|
|
|
#9 | |
|
Expert Confirmé Sénior
![]() François Chef de projet NTIC Inscription : janvier 2007 Messages : 6 555 ![]() |
Bonjour
Citation:
C'est l'inverse : seules les classes abstraites peuvent contenir des méthodes abstraites. Mais une classe peut parfaitement être abstraite sans contenir de méthodes abstraites; le fait qu'une classe soit abstraitre indique seulement qu'elle ne peut pas être instanciée et ne sert quà être héritée.
__________________
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça... Une réponse vous a aidé ? utiliser le bouton "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel |
|
|
|
00
|
|
|
#10 | |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 280 ![]() |
Citation:
Effectivement ça compile en c#, mais bon au niveau design si je dérive d'une classe abstraite et que je n'ai aucune méthode à overrider je me pose des questions..... Toutefois il est inutile d'avoir toute les méthodes abstraite contrairement a ce que faisait penser la question initiale.
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
|
00
|
|
|
#11 |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 280 ![]() |
Je viens de regarder plusieurs sources, et la définition d'une classe abstraite est en général une classe partiellement définie possédant au moins une méthode abstraite (ou méthode virtuelle pure).
Dans beaucoup de langage (dont JAVA) une classe définie comme abstract mais sans méthode abstraite ne compile pas, c# étant multiparadigme et ayant une implémentation privilégiant la performance plutôt que le design (par exemple le mot clé virtual obligatoire en c# pour avoir une méthode virtuel et éviter de se coltiner une vtable a chaque appel) j'aurais du me douter que ceci était possible XD.
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé Sénior
![]() François Chef de projet NTIC Inscription : janvier 2007 Messages : 6 555 ![]() |
Citation:
Citation:
Bref, l'article est un peu flou, au moins dans ces énoncés.
__________________
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça... Une réponse vous a aidé ? utiliser le bouton "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel |
||
|
|
00
|
|
|
#13 |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 280 ![]() |
je ne parle pas que de Wikipedia, bien au contraire c'est même la dernière source que j'ai consulté, la seule qui différencie c'est la msdn, mais elle parle de l'implémentation spécifique de c# donc c'est normal.
Et effectivement une classe non instanciable, et, dont les méthodes ne sont pas définie est ...... une interface ( car une interface peut aussi avoir des propriétés ect). Bien sure Blue Deep on ne parle que de design Poo et non de fonctionnalité. Car une classe abstraite peut avoir effectivement des membres, mais a quoi sert une classe qu'on ne peut instancié avec des membres auquel on ne peut accéder .... à rien, si ce n'est d'interface. Ensuite ce qui fait le choix entre une classe abstraite et une interface et le choix entre la notion d'héritage ou la notion de service.
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() François Chef de projet NTIC Inscription : janvier 2007 Messages : 6 555 ![]() |
Rien n'empêche d'accéder aux membres d'une classe abstraite. Ce qui ne servirait à rien, c'est une classe abstraite avec uniquement des méthodes abstraites et des membres privés (pourtant, ça compile, mais bon ....).
__________________
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça... Une réponse vous a aidé ? utiliser le bouton "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel |
|
|
00
|
|
|
#15 | |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 280 ![]() |
Citation:
Mais alors la mon cher BlueDeep tu ne pourra pas me dire que c'est "propre", on peut le faire, mais doit on le faire ? Et l'ENCAPSULATION ??????
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
|
00
|
|
|
#16 | |
|
Expert Confirmé Sénior
![]() François Chef de projet NTIC Inscription : janvier 2007 Messages : 6 555 ![]() |
Citation:
Un membre protected dans une classe abstraite est tout à fait légitime.
__________________
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça... Une réponse vous a aidé ? utiliser le bouton "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel |
|
|
|
00
|
|
|
#17 | |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 280 ![]() |
Citation:
On peut le faire ok, il y a peut être des cas concret ou ce design est utile (si t'as des exemple), et c'est d'ailleur un design qui est certe possible en c# (qui est moins rigide que JAVA par exemple) mais qui sera réimplanté dans d'autre langages sous la forme abstract class (avec au moins une méthode abstraite) ou une Interface. http://design-patterns.fr/introducti...orientee-objet
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
|
00
|
|
|
#18 | |||||||||
|
Expert Confirmé Sénior
![]() François Chef de projet NTIC Inscription : janvier 2007 Messages : 6 555 ![]() |
Citation:
Citation:
Citation:
En haut, tu as un ensemble de classes abstraites; ici par exemple, une classe controller abstraites pour des controleurs manipulant des listes d'objets. On a des membres protected commun à toutes les classes dérivées, et des membres publics mais qui sont uniquement des events. Pas mal de code implémenté sur des méthodes virtuelles. Code :
De là des classes dérivées; exemples : Controleur de ListView : Code :
Code :
__________________
Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça... Une réponse vous a aidé ? utiliser le bouton "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel |
|||||||||
|
|
00
|
|
|
#19 |
|
Membre expérimenté
![]() worm Consultant .Net Inscription : février 2010 Messages : 280 ![]() |
Ok merci pour l'exemple, mais du coup, dans ton cas quelle différence avec un constructeur en protected ?
(Effectivement les membres public readonly sont un cas à part) Edit : Âpres relecture la question est "brute", mais n'est-ce pas l'utilité du constructeur protégé ?
__________________
"Le train de tes injures roule sur le rail de mon indifférence." "Monde de merde !!" Georges Abitbol. |
|
|
00
|
|
|
#20 | ||
|
Membre Expert
![]() John DoeDéveloppeur .NET Inscription : novembre 2010 Messages : 911 ![]() |
Est-ce que ceci est la bonne méthode pour ma classe repository comme on est sur le débat du abstract et des membres protected ...
Code :
|
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com