RECTANGLES

cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012 - 24 oct. 2009 à 09:00
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012 - 24 oct. 2009 à 17:59
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50743-rectangles

cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012
24 oct. 2009 à 17:59
Merci beaucoup Kriss pour ta réponse :)

(Pas de problème pour le tutoiement, je vois les membres comme une "famille de codeurs", alors ca ne me dérange pas du tout.)
krissssss Messages postés 88 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 2 janvier 2007
24 oct. 2009 à 17:29
En java, tu fais
class Foo implements Serializable
...

En C#
[Serializable()]
class Foo
...

Puis après, dans les 2 langages il existe des fonctions/objets pour sérialiser. Par exemple, en java tu utilise un "object writer".

En C#, il en va de même :
MySerializableClass myObject = new MySerializableClass();
XmlSerializer mySerializer = new XmlSerializer(typeof(MySerializableClass));
StreamWriter myWriter = new StreamWriter("myFileName.xml");
mySerializer.Serialize(myWriter, myObject);
myWriter.Close();

Amuses-toi bien.(Qui tutoies est tutoyé:-p)
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012
24 oct. 2009 à 17:21
Merci Krisss pour ta réponse,

qu'appelles-tu par étiquetter une classe ? (La sérialisation m'est peut être finallement inconnue même en Java, car pour moi sérialiser siginifiait simplement sauvegarder ses classes dans des fichiers avec les classes de Flux sortants => FileOutputStream par exemple)
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012
24 oct. 2009 à 17:18
Au fait Lutinore,
-> merci pour la remarque pour le mot clé static pour la surcharge d'opérateurs
-> il peut utiliser System.StringBuilder pour concaténer plusieures chaines ? (Je le faisais avec qqch d'équivalent en Java)
-> Admettons que je surcharge (ou definisse dans ce cas-ci) la méthode paint d'une PictureBox juste pour réaliser un plateau de Puissance4 (nom déposé ici, désolé, ca sera plus explicite) SANS animation de la chute des pions joués : me recommanderiez-vous quand même d'utiliser la technique du double buffer ? (Ceux qui ont consultés mes sources Java ont peut être dû s'apercevoir que je ne le fais jamais.)

Merci beaucoup à toi ou à ceux qui lisent mon commentaires, et merci d'avance aux personnes qui y répondront .
krissssss Messages postés 88 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 2 janvier 2007
24 oct. 2009 à 17:12
Apparemment, pour sérialiser, il suffit d'étiqueter la classe comme en Java.

Ensuite, on peut exclure des membres en les étiquetant aussi.

J'implémente la dite interface "ICloneable" maintenant.(C'est plus propre)
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012
24 oct. 2009 à 17:02
Merci beaucoup Lutinore, je pense que pour mes prochaines copies profondes j'implémenterais l'interface ICloneable (voire je m'interesserait à la sérialisation que je ne connais pas encore en C sharp)

J'ai également noté le commentaire destiné à Krisss sur la méthode Invalidate (je connaissais déjà, grâce au Java, l'utilisation directe de Graphics, que j'ai donc recherchée avant de coder mes evenements Paint) .

Ces deux commentaires me seront très utiles .
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
24 oct. 2009 à 13:19
loloof64,

- La surcharge d'un opérateur est toujours déclarée statique.

- Il faut implémenter sa propre fonction de copie profonde avec l'interface ICloneable ( ou pas ) la sérialisation peut dans certains cas automatiser la tâche.
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
24 oct. 2009 à 12:52
kris, quelques améliorations possibles :

- Utilise un double buffer pour éviter le scintillement lors des dessins.

- Dans l'évènement "Paint" utilise l'objet "Graphics" de la classe "PaintEventArgs" à la place de la fonction "CreateGraphics".

- Tous les appels à "CreateGraphics" doivent être suivi d'un "Dispose".

- "Invalidate" est souvent plus efficace que "Refresh".

- Utilise "String.Format" pour concaténer plusieurs chaînes.
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012
24 oct. 2009 à 09:23
P.S : j'ai vu quue vous avez utilisé la méthode System.MemberWiseClone pour réaliser une copie superficielle de l'objet Point dans la méthode Clone . Dans la MSDN Library je n'ai pas réussi à trouver un éventuel équivalent afin de réaliser cette fois-ci une copie profonde (où les références sont également "copiées") . Ca existe? Vous la connaissez?
Merci d'avance pour votre réponse .
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012
24 oct. 2009 à 09:00
Bonjour,

je suis un habitué du développement Java, et je débute dans la programmation C Sharp Dot Net (C#.Net).
Evidemment, je ne rencontre pas de difficultés majeures pour m'adapter. Toutefois, votre code est très intéressant pour moi étant donné qu'il met en évidence la surcharge d'opérateur pour un type défini par l'utilisateur.

Donc voici ma question : vos surcharges d'opérateur sont déclarées statique (ou membre de Classes ou lieu de membres d'instances), mais que se passe-t-il si on ne les déclare pas static ? L'appel de type (Point) c = (Point) a + 2; est-il encore valide ?

Merci d'avance pour votre réponse, mais si ma question pourrait vous paraître bête .

Loloof64
Rejoignez-nous