Cours de C# pour l'ESSI - Cours 02 : Initiation |
RACINE |
Partie 1 : Introduction
Ce premier TP a pour but de familiariser un(e) utilisateur(trice) de Java à la programmation en C#. Ce dernier ne sera pas "difficile" pour quelqu'un habitué à Java. Le but est ici ouvertement de se "faire la main" avec un petit exemple en C#. Si vous recherchez un TP évolué ou traitant d'un sujet précis, je vous suggère de vous référer à l'index des cours/TP.
Ce TP sera peu "encadré" car vraiment peu difficile. Le but est de donner du matériel pour découvrir par vous même ce qu'est le C#. Ainsi, c'est ici votre curiosité et votre esprit d'initiative qui sont sollicité !
Il est plus que conseillé de se référer à la présentation C# vs. Java en cas de difficultés.
Si vous constatez des erreurs, des imprécisions ou que vous avez des problèmes avec ce TP, adressez vous à l'auteur .
Tout le matériel qui est présenté n'est nullement un cours officiel de l'ESSI ou de Microsoft. Il a été produit par l'auteur et en est l'exclusive propriété. Toutes remarques pouvant aider à l'améliorer ou à corriger les diverses erreurs pouvant subsister sont les bienvenues. (email auteur (vizzini@essi.fr) ) |
Vous faisiez ça en Java ... | ... et c'est comme ça en C# | Pour faire ça ... |
java.util.Vector | System.Collections.ArrayList | Des tables non ordonnées avec accès indexés, à taille variable. |
java.util.TreeSet, java.util.SortedSet | System.Collections.SortedList | Un ensemble ordonné, basé sur des doublets clé-valeur, sans doublons. Accès en log2n. |
implements Serializable (interface) | [Serializable] (attribut de classe) | Permettre aux objets de votre application d'être sérialisés (passés dans un flux après formatage). Le flux pouvant être un fichier, un socket, ... |
SortedSet.isEmpty() | SortedList.Count == 0 | Savoir si un ensemble est vide ou non. En C#, le compte est un "attribut" (en fait, un Get/Set caché !!) |
UneClasse m = (UneClasse)unSortedList.get(uneCle) | UneClasse m = (UneClasse)unSortedList[uneCle] | Récupérer l'élément de clé uneCle dans l'ensemble. |
GregorianCalendar | DateTime, GregorianCalendar | Attention : DateTime est une structure. Section dédiée. |
ObjectOutputStream
de Java). Voici un petit exemple :BinaryFormatter ser = new BinaryFormatter(); FileStream fout = new FileStream(nomFichier, FileMode.Create); ser.Serialize(fout, set); fout.Close(); } catch (Exception) { /* gestion d'erreur*/ } |
csharpindex.com/colorCode |
BinaryFormatter
: le filtre binaire. La sérialisation "standard" (par rapport à la sérialisation XML)FileStream
: le flux fichier (correspondant au FileOutputStream
Java)Serialize
qui prend un Objet et le sérialise dans le flux en paramètre. Attention, il faut que tout ce que vous sérialisiez soit Serializable
. Cela se fait au moyen de l'attribut de classe [Serializable]
.
[Serializable] public class UneClasse { /* --du code-- */ }Pour en savoir plus sur la sérialisation, allez voir la doc .NET Framework section :
Serializable
. Par contre, à la déserialisation on DOIT connaître le type de ce que l'on désérialise si on veut le down-caster ... Normal quoi !UneClasse unObjet; BinaryFormatter ser = new BinaryFormatter(); FileStream fout = new FileStream(nomFichier, FileMode.Open); unObjet = (UneClasse)ser.Deserialize(fout); fout.Close();
GregorianCalendar
(présente à la quasi-identique en C#). La structure DateTime
suffit TRÈS largement !DateTime
?DateTime d = new DateTime (DateTime.Now); d.AddMinutes (30); //le décalage d'heure, jour, mois, ... est AUTOMATIQUEMENT géré TimeSpan interval = (d - DateTime.Now).Duration(); //on crée un TimeSpan dont la durée représente la différence absolue (à cause du Duration()) entre d et NowLa structure
TimeSpan
sert à représenter des intervalles de temps.unDateTime.ToString("f")
retourne :tertredi 34 fevrimai 2143 34:62
.this
, et notre bouton par this.btnCliquezIci
.le-nom-de-la-frame.le-nom-du-contrôle
...par Alain Vizzini (vizzini@essi.fr )
pour l'ESSI & Microsoft, création 06-03-2002, dernière màj 28-02-2003