Ceci est un exemple implémentant (de manière simpliste) le clonage en C#. Vous pourrez comparer par vous-mêmes avec des programmes équivalents dans les langages que vous connaissez.
Pour les fins de notre exemple, nous utiliserons des formes géométriques, qui seront susceptibles d'être affichées (d'où IDessinable) et qui sauront se dupliquer subjectivement au besoin (d'où IClonable). L'imposition des préfixes I pour les interfaces est l'usage avec la plateforme .NET |
|
Une Forme sera à la fois IDessinable et IClonable. C#, comme Java, supporte l'héritage multiple d'interfaces mais l'héritage simple d'implémentation. Notez ici que, puisque nous avons une classe qui dérive d'interfaces sans implémenter leurs services, nous devons (en C#) qualifier explicitement cette classe d'abstraite et répéter que les méthodes de ces interfaces sont, à ce stade, encore abstraites. C'est un peu verbeux, mais bon... |
|
Pour les fins de l'exemple, lorsqu'une sorte de Forme sera instanciée avec une taille jugée illégale, nous lèverons une exception de type TailleInvalideException. |
|
Les deux exemples de dérivés de Forme que nous utiliserons sont proposés à droite, et sont d'une grande banalité. Après une longue période où les types de retour n'était pas covariants en C#, obligeant le code client à réaliser des transtypages (des casts) conceptuellement superflus, ce problème est désormais réglé et Carré.Cloner peut maintenant retourner Carré, n'étant plus contraint à retourner Clonable. |
|
Pour des fins d'expérimentation quant à la covariance potentielle sur la base de la généricité, nous utiliserons aussi plus bas la classe générique Afficheur<T>, où T doit être IDessinable (donc où Afficheur aurait pu ne pas être générique et où ça n'aurait pas changé grand chose. Si nous avions voulu imposer le respect de plus d'une interface, cependant, la généricité aurait pu être utile. |
|
Notre programme exemple invoque des services de dessin et de clonage montrant au passage des particularités du système de types de C# (examinez le 2e bloc try, qui réalise un transtypage frère-soeur). |
|