Implémentation implicite d'interface
Bonjour,
Je me demande pourquoi il n'est pas possible, en .net, de dire qu'une classe implémente automatiquement une interface si sa signature correspond à celle de l'interface et sans qu'on est besoin de préciser explicitement qu'elle l'implémente.
Par exemple :
Code:
1 2 3 4 5 6 7 8 9 10
|
interface IInterface
{
string PropertyA {get; set;}
}
class ClasseA
{
public string PropertyA {get; set;}
} |
Ça serait bien si on pouvait directement utiliser une instance ClasseA en tant que IInterface. C'est pas que je sois fainéant au point de ne pas vouloir écrire ":IInterface", mais bien souvent on aimerait qu'une classe implémente une interface (et elle l'implémente effectivement au niveau de la signature), mais on ne peut pas accéder aux sources. Évidement le dp adaptateur est possible mais il n'est pas léger à implémenter ni très efficace puisqu'on crée un wrapper pour chaque classe à implémenter.
Je ne vois que peux d'avantage à être obligé d'écrire : ":IInterface"
- Il est vrai que cela force à être plus lisible. On peut voir très rapidement quelles interfaces implémentent une classe. Si on n'avait la possibilité de ne pas l'écrire, on aurait certainement un code moins lisible.
- Cela permet d'être sûr qu'il n'y a pas d'ambiguïté. 2 classes pourraient avoir une même signature mais les membres pourrait avoir des significations totalement différentes. En implémentant une interface on la relie à un ensemble de classe ayant un sens commun.
Avec l'arrivée de c#4 et des types dynamiques, je pense que les choses sont un peu différentes car on peut maintenant invoquer un membre d'une classe sans qu'il n'existe, la vérification étant faite à l'exécution. Je pense que cela est de toute façon plus dangereux que de risquer d'invoquer un membre existant qui n'a pas le sens attendu.
Que pensez vous de tout cela ? Pensez-vous que l'on pourra implicitement implémenter une interface avec l'arrivée du framework 4 ?
Merci d'avance pour vos remarques.