dimanche 30 mars 2014

2 - Le langage C# et le framework .NET

0 commentaires


Qu'est-ce que le langage C# ? Qui l'a créé ? Quel est le rapport avec .NET ? Et puis, qu'est-ce que c'est .NET ?
Autant de questions auxquelles nous allons répondre maintenant. :)
Le C# ressemble beaucoup au Java dont il est inspiré, bien que les deux langages présentent des différences notables. Il reprend aussi certaines notions du C/C++ mais s'en démarque sensiblement.
Seul, il ne sert pas à grand chose. En effet, le langage a besoin d'une boîte à outils pour exécuter facilement des actions courantes, comme ouvrir un fichier, communiquer sur le réseau, ouvrir une fenêtre, réduire une fenêtre, accéder à une base de données, etc.
Cette boîte à outils, que l'on utilise quasi-systématiquement en C#, c'est le framework .NET. C'est un peu comme un énorme couteau suisse qui offre toutes les possibilités dont vous pouvez rêver. ;)
Ce framework .NET n'est pas forcément lié au langage C#. Il est aussi possible de l'utiliser dans d'autres langages comme Visual Basic (plus simple, pour les programmeurs occasionnels), J# (plus proche de Java pour les habitués de Java) ou encore F# (langage fonctionnel).
Framework .NET et langages
Quelques langages permettant d'utiliser le framework .NET.
Pile de composants .NET
Les différentes couches du framework .NET.
Image 010.010.20100
On dit que .NET n'est pas une technologie mais un ensemble de technologies (c'est vous dire si c'est énorme en termes de possibilités !). Je me doute bien que "ensemble de technologies" ne vous dit pas concrètement ce qu'est .NET alors voici ces technologies ci-contre (cf. image 010.010.20100).
Tous ces mots techniques ne doivent pas vous effrayer, c'est normal de ne rien y comprendre pour le moment. ^^
En revanche, il est intéressant de comprendre que .NET est divisé en plusieurs blocs (on parle debibliothèques) qui offrent chacun des services différents.
Vous voyez en particulier les WinForms qui sont les fenêtres graphiques d'un programme, ADO.NET qui permet d'utiliser des bases de données, et WPF qui est une franche amélioration des WinForms (notamment sur le plan du design).
C'est Microsoft qui est à l'origine du projet .NET et de son langage C#. En 2001Anders Hejlsberg (le créateur du langage Delphi), employé chez Microsoft, crée le framework .NET (prononcé comme "dotte nette") et son langage phare : le C# (écrit C Sharp et prononcé comme "cé charpe"). Les deux sont complémentaires, comme nous allons le voir plus loin.
En 2002, la première version du .NET voit le jour et l'environnement de développement de Microsoft, Visual Studio, passe à la version 7.0 pour intégrer le .NET. S'ensuivent plusieurs versions importantes du framework .NET : 2.0, 3.0, 3.5, 4.0.
Actuellement, la dernière version du framework .NET est la 4.0, parue en avril 2010. Pour accompagner cette sortie, l'environnement de développement (le logiciel qui permet de programmer) a lui aussi évolué. Pour travailler en C#, .NET on utilise désormais Visual Studio 2010 (version 10.0). Les anciennes versions fonctionnent toujours mais il est recommandé de se mettre à jour.

Exemple de programme : Paint .NET

Paint .NET est un éditeur d'images gratuit entièrement écrit à l'aide du framework .NET, dont voici un screenshot :
404 Image not found
Paint .NET, éditeur d'images gratuit entièrement écrit à l'aide du framework .NET.
Image 010.010.20200
Vous pouvez d'ailleurs le télécharger sur le site de Paint .NET

À quoi ressemble le C# ?

Voici un code minimal qui affiche "Hello World!" :
1using System;
2 
3class Program
4{
5    public static void Main()
6    {
7        Console.WriteLine("Hello World!");
8    }
9}

Nous aurons l'occasion de comprendre ce que tout cela veut dire plus loin. ;)
Voici un code un peu plus long et complet qui gère (en partie) l'affichage d'une fenêtre, pour vous faire une idée. Je ne vous donne ce bout de code qu'à titre illustratif là encore :
1#region File Description
2//-----------------------------------------------------------------------------
3// MainForm.cs
4//
5// Microsoft XNA Community Game Platform
6// Copyright (C) Microsoft Corporation. All rights reserved.
7//-----------------------------------------------------------------------------
8#endregion
9
10#region Using Statements
11using System;
12using System.IO;
13using System.Reflection;
14using System.Windows.Forms;
15using Microsoft.Xna.Framework.Content;
16using Microsoft.Xna.Framework.Graphics;
17#endregion
18
19namespace WinFormsContentLoading
20{
21    /// <summary>
22    /// Custom form provides the main user interface for the program.
23    /// In this sample we used the designer to fill the entire form with a
24    /// ModelViewerControl, except for the menu bar which provides the
25    /// "File / Open..." option.
26    /// </summary>
27    public partial class MainForm : Form
28    {
29        ContentBuilder contentBuilder;
30        ContentManager contentManager;
31
32
33        /// <summary>
34        /// Constructs the main form.
35        /// </summary>
36        public MainForm()
37        {
38            InitializeComponent();
39
40            contentBuilder = new ContentBuilder();
41
42            contentManager = new ContentManager(modelViewerControl.Services,
43                                                contentBuilder.OutputDirectory);
44
45            /// Automatically bring up the "Load Model" dialog when we are first shown.
46            this.Shown += OpenMenuClicked;
47        }
48
49
50        /// <summary>
51        /// Event handler for the Exit menu option.
52        /// </summary>
53        void ExitMenuClicked(object sender, EventArgs e)
54        {
55            Close();
56        }
57
58
59        /// <summary>
60        /// Event handler for the Open menu option.
61        /// </summary>
62        void OpenMenuClicked(object sender, EventArgs e)
63        {
64            OpenFileDialog fileDialog = new OpenFileDialog();
65
66            // Default to the directory which contains our content files.
67            string assemblyLocation = Assembly.GetExecutingAssembly().Location;
68            string relativePath = Path.Combine(assemblyLocation, "../../../../Content");
69            string contentPath = Path.GetFullPath(relativePath);
70
71            fileDialog.InitialDirectory = contentPath;
72
73            fileDialog.Title = "Load Model";
74
75            fileDialog.Filter = "Model Files (*.fbx;*.x)|*.fbx;*.x|" +
76                                "FBX Files (*.fbx)|*.fbx|" +
77                                "X Files (*.x)|*.x|" +
78                                "All Files (*.*)|*.*";
79
80            if (fileDialog.ShowDialog() == DialogResult.OK)
81            {
82                LoadModel(fileDialog.FileName);
83            }
84        }
85
86
87        /// <summary>
88        /// Loads a new 3D model file into the ModelViewerControl.
89        /// </summary>
90        void LoadModel(string fileName)
91        {
92            Cursor = Cursors.WaitCursor;
93
94            // Unload any existing model.
95            modelViewerControl.Model = null;
96            contentManager.Unload();
97
98            // Tell the ContentBuilder what to build.
99            contentBuilder.Clear();
100            contentBuilder.Add(fileName, "Model", null, "ModelProcessor");
101
102            // Build this new model data.
103            string buildError = contentBuilder.Build();
104
105            if (string.IsNullOrEmpty(buildError))
106            {
107                // If the build succeeded, use the ContentManager to
108                // load the temporary .xnb file that we just created.
109                modelViewerControl.Model = contentManager.Load<Model>("Model");
110            }
111            else
112            {
113                // If the build failed, display an error message.
114                MessageBox.Show(buildError, "Error");
115            }
116
117            Cursor = Cursors.Arrow;
118        }
119    }
120}

Leave a Reply