Table des matières

, , , ,

C#

C# (CSharp) est un langage de programmation orientée objet, développé par Microsoft pour la plateforme .NET, dérivé de C, C++ et proche du Java.

Pré-requis

Installation de .NET

Il est possible d'installer:

Dans chaque cas, suivre cette documentation.

.NET 6 est inclus dans les dépôts Ubuntu 22.04 et 22.10

Pour vérifier la version du SDK installée, exécuter dans un terminal:

dotnet --list-sdks

Le résultat doit être similaire à:

6.0.406 [/usr/share/dotnet/sdk]

Pour vérifier la version du runtime installée:

dotnet --list-runtimes

Le résultat doit être similaire à:

Microsoft.AspNetCore.App 6.0.14 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 6.0.14 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

Outils pour le développement

Un projet .NET est composé d'une multitude de fichiers. Il est donc conseillé d'utiliser un IDE tel que Visual Studio Code, libre et gratuit, ou bien JetBrains Rider (propriétaire et payant). Il existe également MonoDevelop qui est un IDE gratuit et open source spécialement développé par des passionnés pour amener .NET sur Linux. Fonctionne très bien avec le langage C#

Création d'une application console .NET sans IDE

  1. Créer un dossier TestHelloWorld dans le dossier utilisateur.
  2. Ouvrir un terminal et se placer dans ce dossier.
  3. Exécuter la commande:
dotnet new console --use-program-main

Plusieurs fichiers vont être créés dont le fichier:

Program.cs
namespace TestHelloWorld;
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}

Pour lancer l'application, exécuter la commande:

dotnet run

Résultat:

Hello, World!

Création d'une application avec IHM dans Visual Studio Code

Pré-requis:

Procéder ainsi:

dotnet new --install GtkSharp.Template.CSharp
dotnet new --list | grep gtkapp

Le résultat doit être:

Gtk Application             gtkapp          [C#]        Gtk/GUI App
dotnet new gtkapp

Plusieurs fichiers vont se créer, dont MainWindow.glade, qui est le fichier de description du formulaire, que l'on peut modifier avec Glade. Le fichier MainWindow.cs montre comment intégrer un fichier .glade dans un projet et comment gérer les événements:

MainWindow.cs
using System;
using Gtk;
using UI = Gtk.Builder.ObjectAttribute;
 
namespace TestGUI
{
    class MainWindow : Window
    {
        [UI] private Label _label1 = null;
        [UI] private Button _button1 = null;
 
        private int _counter;
 
        public MainWindow() : this(new Builder("MainWindow.glade")) { }
 
        private MainWindow(Builder builder) : base(builder.GetRawOwnedObject("MainWindow"))
        {
            builder.Autoconnect(this);
 
            DeleteEvent += Window_DeleteEvent;
            _button1.Clicked += Button1_Clicked;
        }
 
        private void Window_DeleteEvent(object sender, DeleteEventArgs a)
        {
            Application.Quit();
        }
 
        private void Button1_Clicked(object sender, EventArgs a)
        {
            _counter++;
            _label1.Text = "Hello World! This button has been clicked " + _counter + " time(s).";
        }
    }
}

Pour lancer l'application, exécuter la commande:

dotnet run

Le résultat sera une fenêtre avec le texte Hello World! au centre et un bouton Click me! en bas.

Publication

Pour le déploiement d'une application, .NET, permet de publier une version autonome incluant le runtime .NET ou une version plus légère sans le runtime (dans ce cas, l'utilisateur devra installer le runtime sur son PC).

Pour plus d'informations, consulter cette page.

Scripts

Créer un projet .NET pour de petites tâches simples est un peu excessif. Pour cela il existe dotnet-script qui permet d'exécuter du code C# dans un seul fichier de script. Pas de méthode Main, pas de .csproj, et une compilation transparente.

Installation

Pré-requis: le SDK doit être installé.

Exécuter dans un terminal:

dotnet tool install -g dotnet-script

Création d'un script

dotnet-script est doté d'une commande d'initialisation pour générer un simple script.

dotnet script init

Deux fichiers vont se créer: omnisharp.json et main.csx.

main.csx
#!/usr/bin/env dotnet-script
Console.WriteLine("Hello world!");
./main.csx

Résultat:

Hello World!

Ci dessous un exemple qui exploite un peu plus le potentiel de .NET en créant un tableau de personnes (nom et âge). Le script se verra passer un paramètre, stocké dans la variable Args et récupéré dans la variable nAge. Ensuite, le script filtrera les personnes qui ont moins de nAge années, triées par âge. Modifiez le fichier main.csx en copiant et collant le contenu suivant:

main.csx
#!/usr/bin/env dotnet-script
 
using System;
using System.Data;
 
Int16 nAge = 0;
if (Args.Count > 0)
    nAge = Convert.ToInt16(Args[0]);
else
{
    Console.WriteLine("L'âge n'a pas été spécifié");
    return;
}
DataTable dtable = new DataTable();
dtable.Columns.Add("Nom", typeof(string));
dtable.Columns.Add("Age", typeof(Int16));
dtable.Rows.Add("Silvia", 32);
dtable.Rows.Add("Roberto", 28);
dtable.Rows.Add("Leonardo", 25);
dtable.Rows.Add("Francesco", 59);
dtable.Rows.Add("Alessandro", 55);
dtable.Rows.Add("Lorenzo", 18);
dtable.Rows.Add("Mattia", 41);
dtable.Rows.Add("Tommaso", 62);
dtable.Rows.Add("Gabriele", 39);
dtable.Rows.Add("Federico", 20);
int n=0;
DataRow[] dtRows;
dtRows = dtable.Select("Age<" + nAge, "Age ASC");
string strResult;
Console.WriteLine("Ont moins de " + nAge + " ans");
foreach(DataRow row in dtRows)
{
    strResult = string.Format("{0, -15}Age: {1}", row["Nom"], row["Age"]);
    Console.WriteLine(strResult);
}

Exécuter le script avec la commande:

./main.csx 50

Résultat:

Ont moins de 50 ans
Lorenzo        Age: 18
Federico       Age: 20
Leonardo       Age: 25
Roberto        Age: 28
Silvia         Age: 32
Gabriele       Age: 39
Mattia         Age: 41

Mode REPL (Read-Evaluate-Print-Loop)

Le mode REPL ("mode interactif") est lancé en exécutant dotnet-script sans aucun argument.

Le mode interactif permet de fournir des blocs individuels de code C# qui sont exécutés dès que l'on appuie sur la touche Entrée:

~$ dotnet script
> var x = 1;
> x+x
2

Résolution des problèmes

Consulter cette page de documentation Microsoft pour corriger divers problèmes, dont ceux liés aux erreurs lors de l'exécution des commandes:

dotnet new
dotnet run

Voir aussi


Contributeurs principaux : rafbor.