C# Valid XHTML 1.1Cette page est conforme à la norme CSS!Mise à jour 04-2005
SOMMAIRE

Présentation
    Environnement
    Comparatif des langages et ide
Les exemples détaillés
Les outils et liens
Télécharger les exemples
PRESENTATIONRetour en haut de page

Environnement

C# et la plateforme .NET deviennent incontournables aujourd'hui.
Le but de cette page est d'explorer certains des objets proposés et d'en montrer le fonctionnement. Les objets choisis permettent d'écrire de nombreuses applications courantes de gestion.

La plateforme utilisée ici est SharpDevelop 1.0.3. Cet environnement gratuit permet de s'initier aisément à .NET avec les langages C# et VB.NET. Le C++ est volontairement ignoré pour l'instant.

Comparatif

Les langages proposés dans .NET sont équivalents en syntaxe et capacités. Les objets sont en effet standardisés dans le framework. Il n'est donc pas plus difficile d'écrire en C# qu'en VB.
Après plusieurs expériences, il s'avère que C# est beaucoup plus rigoureux au niveau des définitions de types (variables, fonctions) que VB et de ce fait plus efficace en développement et mise au point.
La presque parfaite compatibilité entre les deux langages est d'ailleurs très facile à vérifier : il suffit de convertir par l'option adéquate de SharpDev un source C# en VB et réciproquement.

La plupart des exemples sont écrits en C#, on trouve cependant leur équivalent en VB et même sous VS2005, l'environnement gratuit de Microsoft.
Bien sûr, l'arborescence du projet est dans ce cas différente mais le source des programmes est compatible.

LES EXEMPLES DETAILLESRetour en haut de page

Base de données Suiv.

Les exemples ont été conçus pour Access 97.
bd01vb et bd01c#
  • utilisation d'un datareader pour charger une liste déroulante,
  • exploitation de la liste déroulante
La liste déroulante est chargée en lisant successivement les lignes de la base de données.
bdc01c# est la traduction de bd01vb

bd02vb
En mode console.
  • utilisation d'un dataset pour mise à jour d'une bd,
  • extraction des caractéristiques des tables et de leurs colonnes
bd03vb
Une liste déroulante est chargée "automatiquement" par un dataset


Graphiques Préc.Suiv.

econom
Le programme effectue la création de courbes mathématiques aléatoires en exploitant les fonctions suivantes :
  • fonctions mathématiques cosinus, sinus, exponentielles,
  • fonctions aléatoires et couleurs,
  • timer,
  • fonctions substring, indexof,
  • textes sur écran graphique (font, pen, brush)
graph01
Le même exemple est écrit en vb.net et c# pour Sharpdev, et en vb.net pour VSE 2005.
  • création de graphiques,
  • groupe de boutons radios,
  • panels,
  • trackBar (curseur),
  • gestion des couleurs, tracé en pointillés,
  • dessin direct dans la Form (evenement Paint)

Menus Préc.Suiv.

menu01c#
  • menu barre et contextuel,
  • - trace une barre de séparation entre deux options,
  • tooltip pour gérer les bulles d'aide
A signaler une anomalie : le caractère & ne souligne pas la lettre qui suit.

Manipulation de fichiers Préc.Suiv.

file01c#
  • Boite de dialogue "enregistrement" pour saisir un nom de fichier dans un dossier,
  • Ecriture, ajout, lecture dans un fichier séquentiel par streamreader, streamwriter,
  • Fileinfo pour caractéristiques (taille fichier),
  • Lien streamwriter et fileinfo,
  • Extraction path et nom de fichier,
  • Copie de fichier,
  • Gestion de fichier binaire (binaryreader/writer)
La traduction en vb.net est parfaite.

Try ... catch Préc.Suiv.

try01c# et try01vb
Le but est de tester l'utilisation des blocs try/catch
  • gestion de l'erreur "division par 0",
  • gestion à plusieurs niveaux (procédure en cours et procédure appelante)
En vb, la clause when n'a pas d'équivalent en c#. Il faut écrire un test.
1/0 provoque un erreur avec un integer, +infini avec un double (pas d'erreur dans ce cas).

Manipulation des classes créées par l'utilisateur Préc.Suiv.

clas01c#
  • création d'une classe carre,
  • création d'une classe carredouble (2 objets carre),
  • définition de méthodes d'accès aux propriétés,
  • définition d'une propriété static (comptage du nombre de carrés)
Comment créer un destructeur qui en sus décrémente le compteur ?

clas02c#
Projet identique au précédent mais la classe carre est incluse dans une dll séparée (projet bibli)
Pour insérer la dll dans le projet :
  • cliquer sur l'onglet des projets,
  • choisir références,
  • clic droit pour ajouter,
  • onglet "browser d'assemblies.net",
  • parcourir
clas03c#
Création d'une classe cl1 et d'une classe cl2, dérivée de cl1
  • méthode affiche() surchargée,
  • polymorphisme de la méthode visu(),
  • surcharge de la méthode standard ToString

Création de controles graphiques personnalisés Préc.Suiv.

usercontrol01c#
Création d'un projet bibctl : graphe en camembert
Le controle possède une propriété "valeur" qui, modifiée, redessine le graphe avec deux secteurs colorés. Le controle peut être redimensionné en phase de développement (evenement resize)

Création d'un projet userctl01 : utilisation du graphe
Inclusion de l'objet bibctl dans les WindowsForms. Lecture des lecteurs de disque et récupération des caractéristiques. Affichage de 2 graphes sur choix du lecteur dans une liste

A voir : comment limiter l'affichage des propriétés héritées, de façon à ne voir que celles strictement nécessaires?

Espaces de noms Préc.Suiv.

espacenomc#
Le but est de tester les règles d'attribution des espaces de noms et leur utilisation

Création de 4 classes identiques dans 4 espaces.
Les méthodes, de meme nom, diffèrent par l'affichage du détail.
Un espace est défini dans using, les autres par appel direct.

Noms = e1, e2, e3.aff, e4
e4 contient deux espaces de noms a1 et a2

Utilisation de l'objet Treeview et du DataGrid Préc.Suiv.

treeview01c#
Le but du projet est l'utilisation d'un treeview pour gérer une base de données bibliothèque. L'application est composée de plusieurs formulaires qui se passent des paramètres.
  • déplacement, expansion, sélection dans le treeview,
  • cases à cocher du tv. Exportation texte des lignes cochées,
  • barre de status modifiée lors de la sélection d'une ligne (affichage du nombre de livres d'un auteur),
  • utilisation du Tag de chaque Node du tv pour stocker la clé de l'enregistrement correspondant de la base de données
Afin de faciliter le déplacement et le positionnement dans le treeview, créer un noeud racine afin de s'y référer pour se repositionner.

Le passage de paramètres entre formulaires est réalisé en surchargeant la méthode Showdialog.
  • appel d'un second formulaire avec passage de parametre (n° livre, retour du titre modifié),
  • test du code retour du formulaire appelé,
  • modification du treeview sans le recharger,
  • mise à jour de la base de données par sql
Mise à jour de données dans un datagrid chargé par un dataset
  • personnalisation des colonnes du datagrid,
  • personnalisation des entetes,
  • personnalisation des lignes

Utilisation de l'objet Listview Préc.Suiv.

listview01c#
Le projet permet de tester l'utilisation d'un listview et également d'une barre d'outils, dans laquelle on choisit le mode de présentation du listview.

Objet listview
  • chargement, formatage des lignes/colonnes du listview en mode détail,
  • modes de visualisation (grandes icones, petites, liste, détail),
  • images, cases à cocher, selection de postes,
  • evenements
Barre d'outils
  • bouton déroulant,
  • images
Test également de la fonction de comparaison de chaines de caracteres.

Base de registre Préc.Suiv.

Projet registry01c#
Le projet permet de manipuler la base de registre à travers l'utilisation de l'objet RegistryKey.
  • création, ajout, suppression, lecture de clés et valeurs,
  • valeurs chaine et multi-chaines,
  • valeurs numériques dword (décimales ou hexadécimales),
  • valeurs binaires

Autres fonctionnalités Préc.Suiv.

Un certain nombre de fonctionnalités n'ont pas été étudiées, sauf en lisant la documentation disponible.
  • datagrid : validation plein ecran,
  • interfaces,
  • événements d'une classe,
  • threads,
  • services web,
  • ndoc : documentation automatique,
  • imprimantes : printdocument,
  • test Units,
  • création d'un projet d'installation

Performances Préc.

Un comparatif des vitesses de traitement a été établi comme suit. Il est très incomplet mais donne une idée de la puissance brute des langages. Il consiste en l'exécution d'un nombre de boucles vides donné.

Langage Nombre de boucles Temps d'exécution Nbe de boucles / seconde Temps pour 1 million de boucles
C#3 milliards 20 secondes150 millions 6,7 ms
VBnet 300 millions 9 secondes 33,33 millions 30 ms
VB6 interprété 300 millions 28 secondes 10,7 millions 93 ms
VB6 compilé 2 milliards 5 secondes 400 millions 2,5 ms

Ces mesures ont été établies sur un Céléron 1,3 Ghz avec 256 Mo de ram.

LES OUTILS ET LIENSRetour en haut de page

IDE

SharpDevelop 1.0.3 build 1768 http://www.icsharpcode.net
Visual Studio Express 2005 (Microsoft)


FrameWork

Fichier dotnetfx.exe sur le site Microsoft
La version 1 convient à SharpDev, la version 2 à VSE 2005.