medbabs
Messages postés38Date d'inscriptionlundi 5 janvier 2009StatutMembreDernière intervention12 janvier 2011
-
10 juil. 2007 à 11:47
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention 9 mars 2011
-
11 juil. 2007 à 17:58
Bonjour
j'ai programmé une classe(en c#) qui fait appel à des méthodes des autres classes, chacune de ces derniers fait la connexion à un type de base de données(sqlserver, oracle.....),comment je peut utiliser delegate pour que au moment d'execution je ne fais l'appel que à la méthode convenable(par exemple celle qui fait la connexion à une base de données SqlServer).
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention 9 mars 2011 10 juil. 2007 à 14:08
Ce genre de problème relève effectivement du polymorphisme : plusieur classe avec des membre et des methode effectuant des action similaire mais avec un code propre a chaqune
ex :
la classe "vehicule" si tu la definie en tant que "virtual" => doit etre herité pour etre utilisé car un "vehicule" reste abstrait en soit (virtual = classe abstraire)
tu en fais par exemple, une voiture, un bateau et un avion
cela dit tte ces classe ont besoin par exemple d'un methode "demarrer avancer reculer ...."
pour cela il suffit d'imposer une interface qui decrit les signature de fonctions/membres qu'elles DEVRONT "implémenter" (c'est le terme) exemple :
public class Voiture : Vehicule, IVehicule
{
}
dans cette interface on decrit donc jsute la signature des membre en question :
public interface IVehicule
{
public bool Start();
....
}
le fait d'implementer l'interface forcera les classe a implementé la methode "Start()"
a partir de la chasque classe decrira sa maniere de demarrage mais effectura tout de meme l'action.
ect ...
cf la doc pour plus d'info mais c'est cela que l'on appelle le polymorphisme (c'est les exactement ca niveau sémentique mais ca s'en approche) ce qui semble etre le cas ici présent
sinon si tu veux persister avec les delegate "il faudrait" :
exposer la declaration du type de delegate :
public/internal delegate void AppelHandler
mais pas l'instance du delegué directement :
private AppelHandler dlg;
public Appel {
get {
return dlg;
}
}
comme ca apres tu invoque le delegué sans pouvoir le modifier, l'instanciation et le rattachement du delegué a sa procédure se fait en code DANS la classede facon masqué
TeBeCo
Vous n’avez pas trouvé la réponse que vous recherchez ?