#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