#format wiki
#LANGUAGE it
<
>
<>
<>
= Introduzione =
'''C#''' (pronunciato «''C sharp''»), è un linguaggio di programmazione orientato agli oggetti sviluppato da Microsoft per la piattaforma .NET (pronunciato «''dot net''»). Le specifiche del linguaggio sono state standardizzate dalla ECMA (European Computer Manufacturers Association).<
>
Si ispira ai linguaggi C/C++ e Java, ma rispetto a questi integra diverse nuove caratteristiche e miglioramenti:
* tutto è un oggetto;
* possibilità di utilizzare i puntatori, ma solo in particolari zone di codice definite ''unsafe'';
* sono consentite solo conversioni implicite, dove non ci sia perdita di dati;
* è possibile ereditare da una sola classe (come in Java);
* overloading degli operatori;
* presenza di ''namespace'' al posto dei ''package'' di Java.
Per programmare in '''C#''' su GNU/Linux è ancora disponibile il framework [[https://www.mono-project.com/|Mono]], un'implementazione libera e multi-piattaforma di Microsoft .NET. Tuttavia è generalmente considerato ormai superato, in quanto corrisponde al .NET Framework 4.x.<
>
La soluzione attualmente consigliata è '''[[https://docs.microsoft.com/it-it/dotnet/core/introduction|.NET]]''', piattaforma gratuita, multipiattaforma e open source.
= Installazione di .NET =
È possibile installare:
* '''.NET''' con il solo '''Runtime''' per eseguire applicazioni
* '''.NET [[https://it.wikipedia.org/wiki/Software_development_kit|SDK]]''' necessario per sviluppare e comprensivo del '''Runtime'''
In entrambi i casi seguire le istruzioni di [[https://learn.microsoft.com/it-it/dotnet/core/install/linux-ubuntu|questa guida]].
{{{#!wiki note
.NET 6 è incluso nei repository di Ubuntu 22.04 e 22.10 (chiamati «feed di gestione pacchetti» nella guida Microsoft).
}}}
Per verificare la versione SDK installata digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{
dotnet --list-sdks
}}}
L'output sarà simile al seguente {{{
6.0.404 [/usr/share/dotnet/sdk]
}}}
Per verificare la versione del runtime installato:{{{
dotnet --list-runtimes
}}}
L'output sarà simile al seguente {{{
Microsoft.AspNetCore.App 6.0.12 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 6.0.12 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
}}}
= Strumenti per lo sviluppo =
Un progetto .NET è composto da una molti file. Quindi si consiglia di utilizzare un IDE orientato allo sviluppo (ad esempio '''[[https://www.jetbrains.com/rider/|JetBrains Rider]]''', proprietario e a pagamento) oppure un editor avanzato (ad esempio '''[[Ufficio/EditorDiTesto/VisualStudioCode|VisualStudioCode]]''', con licenza libera e gratuita).
= Creare un'applicazione console .NET senza utilizzare un IDE =
0. Creare una cartella `TestHelloWorld` nella propria '''Home'''.
0. Aprire un [[AmministrazioneSistema/Terminale|terminale]] e spostarsi in questa cartella.
0. Digitare il seguente comando: {{{
dotnet new console --use-program-main
}}}
In questo modo verranno creati diversi file. Il file di codice `Program.cs` conterrà le seguenti righe: {{{#!cplusplus
namespace TestHelloWorld;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}}}
0. Eseguire il seguente comando: {{{
dotnet run
}}}
Il risultato sarà:{{{
Hello, World!
}}}
Per ulteriori informazioni consultare [[https://learn.microsoft.com/it-it/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-6-0|questa pagina]].
= Creazione di un'applicazione con GUI in VisualStudioCode =
Prerequisiti:
* per sviluppare in C#, deve essere installata l'estensione '''[[https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp|C#]]''' (normalmente l'editor propone di installarla quando si apre un file C#); per installare le estensioni di '''!VisualStudioCode''' nel '''VS Code Extension Marketplace''' consultare [[https://code.visualstudio.com/docs/editor/extension-gallery|questa guida]].
* per creare una GUI si deve utilizzare un framework a scelta, come [[https://learn.microsoft.com/it-it/dotnet/maui/what-is-maui?view=net-maui-7.0|MAUI]] (per Linux viene sviluppato dalla comunità), [[https://platform.uno/|Uno]], [[https://avaloniaui.net/|AvaloniaUI]] o [[https://github.com/GtkSharp/GtkSharp|GtkSharp]]. Nell'esempio successivo verrà usato quest'ultimo.
Seguire la procedura descritta di seguito.
0. Nel terminale di '''!VisualStudioCode''' eseguire il seguente comando per installare il template:{{{
dotnet new --install GtkSharp.Template.CSharp
}}}
0. Controllare che il template sia presente con il seguente comando:{{{
dotnet new --list | grep gtkapp
}}}
Se tutto è corretto, l'output sarà il seguente:{{{
Gtk Application gtkapp [C#] Gtk/GUI App
}}}
0. Selezionare dal menù principale '''''File → Apri cartella'''''.
0. Nella finestra di dialogo '''Apri cartella''' creare una cartella `TestGUI` e selezionarla.
0. Fare quindi clic su '''Aprire'''. Per impostazione predefinita il nome della cartella diventerà il nome e il ''namespace'' del progetto.
0. Nel terminale eseguire il seguente comando: {{{
dotnet new gtkapp
}}}
Verranno creati diversi file, tra cui `MainWindow.glade`, che è il file di descrizione del form da modificare successivamente con [[Programmazione/Python/Glade|Glade]]. Il file `MainWindow.cs` mostra come integrare i file `.glade` in un progetto e come gestire gli eventi: {{{#!cplusplus
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).";
}
}
}
}}}
Per avviare l'applicazione, basterà eseguire nel terminale:{{{
dotnet run
}}}
Il risultato sarà una finestra con il testo «`Hello World!`» al centro e un pulsante «'''Click me!'''» in basso.
= Pubblicazione =
Per la distribuzione di una applicazione, '''.NET''' permette di pubblicare una versione standalone che include il runtime .NET o una versione più leggera senza il runtime (in questo caso l'utente dovrà installare il runtime sul suo PC).
Per ulteriori informazioni consultare [[https://learn.microsoft.com/it-it/dotnet/core/deploying/|questa pagina]].
= Script =
Consultare [[Programmazione/CSharp/Script|questa guida]].
= Esempi =
Per gli utenti desiderosi di approfondimento, in [[/Listati|questa pagina]] vengono proposti degli esempi di programmi scritti in '''C#''' a difficoltà crescente.
= Risoluzione dei problemi =
[[https://learn.microsoft.com/it-it/dotnet/core/install/linux-package-mixup|Questa pagina]] della documentazione ufficiale Microsoft contiene soluzioni e link relativi a diversi problemi, fra cui errori relativi ai comandi:{{{
dotnet new
dotnet run
}}}
= Ulteriori risorse =
* [[https://learn.microsoft.com/it-it/dotnet/csharp/|Documentazione Microsoft per C#]]
* [[https://learn.microsoft.com/it-it/dotnet/fundamentals/|Documentazione Microsoft .NET]]
* [[http://www.csharphelp.com/|C# Help]] (consigli su C#)
* [[http://www.c-sharpcorner.com/|C# Corner]] (consigli su C#)
* [[http://visualcsharp.it/default.aspx|Comunità italiana di sviluppo con C# e .NET]]
* [[http://www.mono-project.com/Main_Page|Sito ufficiale del progetto Mono]]
----
CategoryProgrammazione