Réponse acceptée !
Je pense que tu prend le problème à l'envers :
Le but d'une interface est de définir ce qui est communs à plusieurs classes, un "contrat" que chaque implémentation va remplir : autrement dit, lorsqu'un objet implémente une interface, tu sais qu'il implémentera toutes les méthodes de l'interface. C'est par ce méchanisme que tu peux écrire du code "générique", qui va être utilisable sur n'importe quel "sous type" implémentant l'interface, par exemple une méthode qui prend en paramètre un objet du type de ton interface et qui va pouvoir travailler dessus en utilisant les méthodes déclarées dans l'interface, quelque soit leurs implémentations ou les spécificités de tes classes (c'est ce qu'on appelle le polymorphisme).
Or, dans ton cas, tu parles de méthodes ou de variables spécifiques, qui ne sont donc pas déclarée dans ton interface de base.
Ainsi, tu devrait plutot procéder comme suit :
- Lorsque tu as besoin d'appeler des méthodes spécifiques (ou d'accéder à des variables spécifiques), tu ne dois pas manipuler des "Crypteur", mais des "CrypteurA", "CrypteurB", etc.
- Lorsque tu as besoin d'appeler tes méthodes communes (déclarée dans l'interface) tu pourra passer indifférement un objet "CrypteurA", "CrypteurB", etc à ta méthode, qui elle ne manipulera que des "Crypteur".
Ensuite, tu peux aussi faire des choses comme celle là :
- Déclarer une variable de type "CrypteurA" :
CrypteurA monCrypteurA = new CrypteurA();
- Apeler une méthode qui prend en paramètre un "Crypteur" :
public void MaMethode(Crypteur crypteur)
- Dans ta méthode, si tu dois appeler une fonction spécifique
et que tu sais que ton crypteur est bien d'un type spécifique, tu peux caster ton crypteur en CrypteurA :
(crypteur as CrypteurA).MaMethodeSpecifiqueA();
- Pour tester le type de ta variable crypteur par exemple :
if(crypteur is CrypteurA)
{
[...]
}
Working as designed
www.nikoui.fr