cs_loloof64
Messages postés342Date d'inscriptionvendredi 1 septembre 2006StatutMembreDerniè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és88Date d'inscriptionjeudi 26 décembre 2002StatutMembreDerniè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és342Date d'inscriptionvendredi 1 septembre 2006StatutMembreDerniè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és342Date d'inscriptionvendredi 1 septembre 2006StatutMembreDerniè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és88Date d'inscriptionjeudi 26 décembre 2002StatutMembreDerniè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és342Date d'inscriptionvendredi 1 septembre 2006StatutMembreDerniè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és3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 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és3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 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és342Date d'inscriptionvendredi 1 septembre 2006StatutMembreDerniè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és342Date d'inscriptionvendredi 1 septembre 2006StatutMembreDerniè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 .
24 oct. 2009 à 17:59
(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.)
24 oct. 2009 à 17:29
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)
24 oct. 2009 à 17:21
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)
24 oct. 2009 à 17:18
-> 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 .
24 oct. 2009 à 17:12
Ensuite, on peut exclure des membres en les étiquetant aussi.
J'implémente la dite interface "ICloneable" maintenant.(C'est plus propre)
24 oct. 2009 à 17:02
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 .
24 oct. 2009 à 13:19
- 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.
24 oct. 2009 à 12:52
- 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.
24 oct. 2009 à 09:23
Merci d'avance pour votre réponse .
24 oct. 2009 à 09:00
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