|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 568 ![]() |
Hello,
je suis en train de me refaire une santé en C# (avec le bouquin C# version 2) et si j'ai compris que les interfaces étaient un contrat permettant de garantir qu'une classe dispose de certaines méthodes implémentées, je voudrais une petite explication sur l'exemple suivant : 1. Je crée une classe Personne 2. Pour pouvoir dupliquer une instance de Personne, je dois créer la méthode Clone dans laquelle j'utilise la méthode MemberWiseClone(). Dans l'exemple que donne le bouquin, il interface la classe Personne avec ICloneable. Ma question est la suivante : Pour que la méthode Clone fonctionne, il n'y a pas besoin que la classe Personne soit ICloneable (j'ai testé :-). Donc, techniquement, à quoi sert le fait de déclarer Personne comme ICloneable ? Merci de votre aide ! |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Loïc Étudiant Inscription : octobre 2009 Messages : 83 ![]() |
Salut.
Ca sert à ce que ta classe soit utilisable par d'autre méthodes qui accepte une interface IClonable. Une interface permet de spécifier que telle ou telle classe à ses propriétés. Et si une méthode demande cette interface en paramètre, toutes les classes implémentant cette interface peuvent être donné à l'appel de la fonction. |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 568 ![]() |
quand tu dis classes, c'est un raccourci pour "objets de la classe" ?
pourrais-tu me donner un exemple rapide ? Merci ! |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() |
Pas de chance, IClonable est une interface un peu...ratée. Elle est d'ailleurs déconseillées par Microsoft (en gros car elle ne précise pas si c'est un clonage type "deep copy" or "shallow copy".
En gros, l’héritage d'une classe est une relation "est une". "Manager" est une "Personne". Il y a une notion de spécialisation Une interface est une caractéristique, une fonctionnalité qui n'est pas relié spécialement à une classe. "IComparable", par exemple n'est pas une spécialisation d'une classe quelconque. IComparable peut être utilisée sur n'importe quelle classe. Si tu veux qu'une classe ait cette fonctionnalité, tu peux l'implémenter. Grâce à ça, tout le monde peut savoir que ta classe peut être comparée et peut donc être utilisée avec certains méthodes de tri, comme Array.Sort(), par exemple. On voit là un autre avantage des interfaces : une sorte de généricité. La méthode Sort() de Array demande juste une interface IComparable. Elle ne se soucie pas de la classe elle-même. C'est donc très générique, n'importe qui peut l'utiliser en implémentant IComparable. Si Sort() demandait un type "Manager", par exemple, elle ne pourrait être utilisée que par des classes de type "Manager" ou dérivées. Bon c'est peut-être pas super académique ce que je dis, mais c'est l'idée générale
__________________
Microsoft MVP : Visual C# MCPD - Windows Phone Developer MCPD - Windows Developer 4 http://www.guruumeditation.net “If debugging is the process of removing bugs, then programming must be the process of putting them in.” (Edsger W. Dijkstra) |
|
00
|
|
|
#5 |
|
Membre éclairé
![]() ![]() Inscription : juin 2002 Messages : 283 ![]() |
Les interfaces sont, entre autres, des contrats, c'est-à-dire une promesse d'implémentation.
Qu'il existe une interface ICloneable n'empêche aucune classe d'implémenter une méthode Clone(). C# offre le moyen de contraindre des instances à respecter un contrat donné et ça se fait par l'adhérence de la classe de cette instance à une interface. Et ce même si cette contrainte ne garantit en rien la nature de l'implémentation du contrat. Si une méthode exige un object qui adhère à IDisposable, rien ne garantie que l'implémentation de Dispose() ne sera pas un WriteLine("Hello!"). Par exemple, dans un module de bas niveau, j'exige qu'on passe une instance d'une classe qui implémente ICloneable à cause d'opérations parallèles asynchroniques. Je suis prêt à accepter que le clonage ne fonctionne pas (mon thread va m'indiquer que mon objet n'est pas valide) mais au moins, je n'aurai pas exception d'implémentation, ce qui serait assez gênant dans une librairie publique comme la nôtre. |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : septembre 2005 Messages : 568 ![]() |
Merci à tous, c'est plus clair en effet !
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com